如何创建网站的快捷方式,crm管理是什么意思,中国工业设计在线官网,手机logo在线制作 免费Docker学习笔记
前言#xff1a; 之前学过一遍忘了 那就再来一遍没啥好说的就是可以直接构建一个环境 然后方便部署官网 http://www.docker.com仓库 https://hub.docker.comDocker的基本组成 镜像 容器 仓库
安装与卸载
卸载
sudo yum remove docker \docker-client \dock…Docker学习笔记
前言 之前学过一遍忘了 那就再来一遍没啥好说的就是可以直接构建一个环境 然后方便部署官网 http://www.docker.com仓库 https://hub.docker.comDocker的基本组成 镜像 容器 仓库
安装与卸载
卸载
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine安装
yum -y install gcc//
yum -y install gcc-c
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# docker-ce是Docker引擎docker-ce-cli是客户端
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 查询版本列表
yum list docker-ce --showduplicates | sort -r
# 指定版本安装17.09.0.ce版
# sudo yum install docker-ce-VERSION_STRING docker-ce-cli-VERSION_STRING containerd.io docker-compose-plugin
sudo yum install docker-ce-17.09.0.ce docker-ce-cli-17.09.0.ce containerd.io docker-compose-plugin
# 新版本的Docker就是一个系统服务可以直接使用启动系统服务方式启动
systemctl start docker
# 此时查看docker版本可以看到Server: Docker EngineDocker引擎版本号
docker version
//卸载
systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerddocker run hello-world阿里云镜像加速https://cr.console.aliyun.com/cn-hangzhou/instances/mirrorsdocker run 做了什么先是自己找然后去网上找镜像 然后拉到本地
docker常用命令
启动dockersystemctl start docker
停止Dockersystemctl stop docker
重启Dockersystemctl restart docker
查看状态systemctl status docker
设置开机自启systemctl enable docker
查看Docker版本docker version
查看Docker概要信息docker info
查看Docker总体帮助文档docker --help
列出本地镜像docker images
参数
● -a列出所有镜像含历史镜像
● -q只显示镜像ID
● -f过滤
在远程仓库中搜索镜像:docker search 镜像名称
参数
● -f过滤
● --limit 数量只展示前几项
下载镜像:docker pull 镜像名称[:tag]
不加 tag 时默认下载最新的镜像即tag为latest。
查看占据的空间:docker system df
删除镜像:docker rmi -f 镜像名称/ID
可以使用空格分隔删除多个镜像docker rmi 镜像1 镜像2 镜像3
- docker 虚悬镜像是什么 仓库名标签都是none的镜像俗称虚悬镜像容器命令
docker pull ubuntu
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用的参数
● --name为容器指定一个名称
● -d后台运行容器并返回容器ID也即启动守护式容器
● -i以交互模式interactive运行容器通常与-t同时使用
● -t为容器重新分配一个伪输入终端tty通常与-i同时使用。也即启动交互式容器前台有伪终端等待交互
● -e为容器添加环境变量
● -P随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
● -p指定端口映射
-p指定端口映射的几种不同形式
● -p hostPort:containerPort端口映射例如-p 8080:80
● -p ip:hostPort:containerPort配置监听地址例如 -p 10.0.0.1:8080:80
● -p ip::containerPort随机分配端口例如 -p 10.0.0.1::80
● -p hostPort1:containerPort1 -p hostPort2:containerPort2指定多个端口映射例如-p 8080:80 -p 8888:3306
列出正在运行的容器docker ps [OPTIONS]
常用参数
● -a列出当前所有正在运行的容器历史上运行过的容器
● -l显示最近创建的容器
● -n显示最近n个创建的容器
● -q静默模式只显示容器编号
启动已经停止的容器docker start 容器ID或容器名
重启容器docker restart 容器ID或容器名
停止容器docker stop 容器ID或容器名
强制停止容器docker kill 容器ID或容器名
删除已经停止的容器docker rm 容器ID或容器名
删除容器是 docker rm删除镜像是 docker rmi注意区分。
查看容器日志docker logs 容器ID或容器名
查看容器内运行的进程docker top 容器ID或容器名
查看容器内部细节docker inspect 容器ID或容器名
进入正在运行的容器docker exec -it 容器ID bashShell
重新进入docker attach 容器ID
docker exec 和 docker attach 区别
● attach直接进入容器启动命令的终端不会启动新的进程用exit退出会导致容器的停止
● exec是在容器中打开新的终端并且可以启动新的进程用exit退出不会导致容器的停止
如果有多个终端都对同一个容器执行了 docker attach就会出现类似投屏显示的效果。一个终端中输入输出的内容在其他终端上也会同步的显示。
容器内文件拷贝到宿主机docker cp 容器ID:容器内路径 目的主机路径
export导出容器的内容流作为一个tar归档文件对应import命令
import从tar包中的内容创建一个新的文件系统再导入为镜像对应export命令
示例
# 导出
# docker export 容器ID tar文件名
docker export abc aaa.tar
# 导入
# cat tar文件 | docker import - 自定义镜像用户/自定义镜像名:自定义镜像版本号
cat aaa.tar | docker import - test/mytest:1.0.1交互式容器(会返回一个终端给你使用)
-p 6379:6389 主机去访问的:docker暴露出来的 -it需要有交互
docker run -it --namemyu ubuntu /bin/bash
exit 退出
ctrlpq退出 容器不停止守护式容器后台运行
docker run -d redisdocker 镜像
Docker 中的文件存储驱动叫做 storage driver。 Docker 最早支持的stotage driver是 AUFS它实际上由一层一层的文件系统组成这种层级的文件系统叫UnionFS。 联合文件系统UnionFSUnion 文件系统是一种分层、轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同目录挂载到同一个虚拟文件系统下unite serveral directories into a single virtual filesystem。 Union文件系统是Docker镜像的基础。镜像可以通过分层来进行集成基于基础镜像可以制作具体的应用镜像。 特性一次同时加载多个文件系统但从外面看起来只能看到一个文件系统联合加载会把各层文件系统叠加起来这样最终的文件系统会包含所有底层的文件和目录。 后来出现的docker版本中除了AUFS还支持OverlayFS、Btrfs、Device Mapper、VFS、ZFS等storage driver。bootfs和rootfs bootfsboot file system主要包含 bootloader 和 kernelbootloader主要是引导加载 kernelLinux刚启动时会加载bootfs文件系统。 在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了此时内存的使用权已经由 bootfs 转交给内核此时系统也会卸载 bootfs。 rootfsroot file system在bootfs之上包含的就是典型Linux系统中的 /dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版比如Ubuntu、CentOS等。 docker镜像底层层次 对于一个精简的OSrootfs可以很小只需要包括最基本的命令、工具和程序库就可以了因为底层直接使用Host的Kernel自己只需要提供rootfs就可以。所以对于不同的Linux发行版bootfs基本是一致的rootfs会有差别不同的发行版可以共用bootfs。docker commit 提交容器让他成为一个新的镜像
docker commit -m -a‘作者’ 容器id 要创建的目标镜像名:[标签名]
要创建的镜像必须是运行中的镜像推送到aliyun 直接上阿里云操作 docker registry 本地自己搭建的docker的镜像服务器
Docker Registry
Docker Registry是官方提供的工具用于构建私有镜像仓库。
环境搭建
Docker Registry也是Docker Hub提供的一个镜像可以直接拉取运行。
步骤拉取镜像 启动Docker Registry
docker run -d -p 5000:5000 -v /app/myregistry/:/tmp/registry --privilegedtrue registry
docker run -it --privilegedtrue -v /宿主机绝对路径:/容器内目录 镜像名-v /app/myregistry/:/tmp/registry 容器数据卷容器和主机的数据进行一个映射--privilegedtrue 放开权限验证查看私服中的所有镜像
curl http://192.168.xxx.xxx:5000/v2/_catalog
Registry会返回json格式的所有镜像目录
向Registry私仓中上传镜像
配置docker允许接收http请求
配置方式和上传到nexus私仓相同。
修改/etc/docker/daemon.json添加insecure-registries允许http
{registry-mirros: [https://xxxx.mirror.aliyuncs.com],insecure-registries: [192.168.xxx.xxx:5000]
}
然后重启docker新版本的docker会立即生效
# centos6 的命令
sudo chkconfig daemon-reload
sudo service docker restart
# centos7 的命令
sudo systemctl daemon-reload
sudo systemctl restart docker
推送到私仓
步骤添加一个对应私仓地址的tag
docker tag lee/myubuntu:1.0.1 192.168.xxx.xxx:5000/lee/myubuntu:1.0.1push到私仓
docker push 192.168.xxx.xxx:5000/lee/myubuntu:1.0.1查看私仓中镜像目录验证
curl http://192.168.xxx.xxx:5000/v2/_catalog
拉取验证
docker pull 192.169.xxx.xxx:5000/lee/myubuntu:1.0.1容器卷
docker run -d -p 5000:5000 -v /app/myregistry/:/tmp/registry --privilegedtrue registrydocker run -it --privilegedtrue -v /宿主机绝对路径:/容器内目录 镜像名docker inspect dockerpsid 查看详细信息容器内部被限制只能读取不能写 docker run -it --privilegedtrue -v /主机:/容器:ro 镜像名 rw就是可读可写容器2继承容器1的文件 docker run -it --privilegedtrue --volumes -from u1 --name u2 ubuntu
安装常用软件
安装mysql
docker serach mysqldocker pull mysql:5.7docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 配置的是root用户的密码docker exec -it 0dd7aa61f0d4 mysql -uroot -p123456docker exec -it 0dd7aa61f0d4 mysql -uroot -p123456 /bin/bash 简单版的Mysql会存在以下问题 ● 中文乱码 ● 没有容器卷映射 启动docker容器后可以正常的连接、创建数据库创建表插入数据。但是插入中文则会报错。 这是因为docker默认的字符集的问题可以在mysql中使用以下命令查看数据库字符集 show variables like ‘character%’; 返回的字符集中character_set_database、character_set_server等都为latin1字符集所以会报错。 而且因为启动容器时没有配置容器卷映射当容器意外被删时数据无法找回。启动 Mysql 容器并配置容器卷映射
docker run -d -p 3306:3306 \--privilegedtrue \-v /app/mysql/log:/var/log/mysql \-v /app/mysql/data:/var/lib/mysql \-v /app/mysql/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORDroot \--name mysql \mysql:5.7这个反斜杠只是起到到分割的作用 如果跑不通就删除反斜杠 在/app/mysql/conf下新建 my.cnf通过容器卷同步给mysql实例解决中文乱码问题是mysql标准的配置文件
[client]
default-character-setutf8
[mysqld]
collation_server utf8_general_ci
character_set_server utf8docker restart mysql
安装redis
docker pull redis:6.0.8简单的启动Redis容器docker run -p 6379:6379 -d redis:6.0.8实际应用版Redis 步骤
宿主机创建目录/app/redis在/app/redis下创建文件redis.conf主要修改以下几项配置
# 开启密码验证可选
requirepass 123
# 允许redis外地连接需要注释掉绑定的IP
# bind 127.0.0.1
# 关闭保护模式可选
protected-mode no
# 注释掉daemonize yes或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突会导致容器一直启动失败
daemonize no
# 开启redis数据持久化 可选
appendonly yes即最后的配置文件为 3. 启动docker容器因为要使用自定义的配置文件所以需要指定容器运行的命令为redis-server 容器内配置文件路径
docker run -d -p 6379:6379 --name redis --privilegedtrue \-v /app/redis/redis.conf:/etc/redis/redis.conf \-v /app/redis/data:/data \redis:6.0.8 \redis-server /etc/redis/redis.conf高级篇
mysql 主从复制
启动容器实例
docker run -p 3307:3306 \--name mysql-master \--privilegedtrue \-v /app/mysql-master/log:/var/log/mysql \-v /app/mysql-master/data:/var/lib/mysql \-v /app/mysql-master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORDroot \-d mysql:5.7进入/app/mysql-master/conf新建my.cnf配置文件 vim my.conf
[mysqld]
## 设置server_id, 同一个局域网中需要唯一
server_id101
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能
log-binmall-mysql-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062重启容器实例 docker restart mysql-master 进入容器实例内 docker exec -it mysql-master /bin/bash 登录mysql创建数据同步用户
-- 首先使用 mysql -uroot -p 登录mysql
-- 创建数据同步用户
create user slave% identified by 123456;
-- 授权
grant replication slave, replication client on *.* to slave%;
flush privileges;安装从服务器容器实例端口号3308 启动容器服务
docker run -p 3308:3306 \--name mysql-slave \--privilegedtrue \-v /app/mysql-slave/log:/var/log/mysql \-v /app/mysql-slave/data:/var/lib/mysql \-v /app/mysql-slave/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORDroot \-d mysql:5.7进入/app/mysql-slave/conf目录创建my.cnf配置文件
[mysqld]
## 设置server_id, 同一个局域网内需要唯一
server_id102
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能以备slave作为其它数据库实例的Master时使用
log-binmall-mysql-slave1-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断
## 如1062错误是指一些主键重复1032是因为主从数据库数据不一致
slave_skip_errors1062
## relay_log配置中继日志
relay_logmall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates1
## slave设置只读具有super权限的用户除外
read_only1修改完配置需要重启slave容器实例 docker restart mysql-slave 在主数据库中查看主从同步状态 进入主数据库容器 docker exec -it mysql-master /bin/bash 进入Mysql mysql -uroot -p 查看主从同步状态 show master status; 主要查看返回结果的文件名File、当前位置Position mall-mysql-bin.000001 769 进入从数据库容器配置主从复制 docker exec -it mysql-slave /bin/bash 进入数据库 mysql -uroot -p 配置从数据库所属的主数据库
-- 格式
-- change master to master_host宿主机ip,master_user主数据库配置的主从复制用户名,master_password主数据库配置的主从复制用户密码,master_port宿主机主数据库端口,master_log_file主数据库主从同步状态的文件名File,master_log_pos主数据库主从同步状态的Position,master_connect_retry连接失败重试时间间隔秒;change master to master_host192.168.44.128,master_userslave,master_password123456,master_port3307,master_log_filemall-mysql-bin.000002,master_log_pos154,master_connect_retry30;查看主从同步状态
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多纵向展示比友好
show slave status \G;除了展示刚刚配置的主数据库信息外主要关注 Slave_IO_Running、Slave_SQL_Running。目前两个值应该都为 No表示还没有开始。 开启主从同步 start slave; 再次查看主从同步状态Slave_IO_Running、Slave_SQL_Running都变为Yes。 主从复制测试 在主数据库上新建库、使用库、新建表、插入数据
create database db01;
use db01;
create table t1 (id int, name varchar(20));
insert into t1 values (1, abc);在从数据库上使用库、查看记录 show databases; use db01; select * from t1;
如果运行不起来就关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl stop iptables
sudo systemctl disable iptables面试题 1~2亿条数据需要缓存请问如何设计这个存储案例哈希取余数进行存储优点简单缺点不利于扩容一致性哈希算法分区为了解决分布式数据缓存变动哈希槽分区
Redis集群3主3从
先空一下回头加强一下redis再回来搞这个
DockerFile
Dockerfile编写 ● 每条保留字指令都必须为大写字母且后面要跟随至少一个参数 ● 指令按照从上到下顺序执行 ● #表示注释 ● 每条指令都会创建一个新的镜像层并对镜像进行提交 Docker引擎执行Docker的大致流程
docker从基础镜像运行一个容器执行一条指令并对容器做出修改执行类似docker commit的操作提交一个新的镜像层docker再基于刚提交的镜像运行一个新容器执行Dockerfile中的下一条指令直到所有指令都执行完成
FROM 基础镜像当前新镜像是基于哪个镜像的指定一个已经存在的镜像作为模板。Dockerfile第一条必须是FROM
# FROM 镜像名
FROM hub.c.163.com/library/tomcatFROM
# FROM 镜像名
FROM hub.c.163.com/library/tomcat-MAINTAINER 镜像维护者的姓名和邮箱地址
# 非必须
MAINTAINER ZhangSan zs163.comRUN 容器构建时需要运行的命令。 有两种格式
# 等同于在终端操作的shell命令
# 格式RUN 命令行命令
RUN yum -y install vimEXPOSE当前容器对外暴露出的端口。
# EXPOSE 要暴露的端口
# EXPOSE port[/protocol] ....
EXPOSE 3306 33060WORKDIR指定在创建容器后 终端默认登录进来的工作目录。
ENV CATALINA_HOME /usr/local/tomcat
WORKDIR $CATALINA_HOMEUSER 指定该镜像以什么样的用户去执行如果不指定默认是root。一般不修改该配置
# USER user[:group]
USER patrickENV 用来在构建镜像过程中设置环境变量。 这个环境变量可以在后续的任何RUN指令或其他指令中使用
# 格式 ENV 环境变量名 环境变量值
# 或者 ENV 环境变量名值
ENV MY_PATH /usr/mytest# 使用环境变量
WORKDIR $MY_PATHADD 将宿主机目录下或远程文件的文件拷贝进镜像且会自动处理URL和解压tar压缩包。
COPY src dest
COPY [src, dest]
# src源路径源文件或者源目录
# dest目标路径容器内的指定路径该路径不用事先建好。如果不存在会自动创建CMD 指定容器启动后要干的事情。
# CMD 命令
CMD echo hello world构建镜像
创建名称为Dockerfile的文件示例
FROM ubuntu
MAINTAINER leeleexxx.comENV MYPATH /usr/local
WORKDIR $MYPATHRUN apt-get update
RUN apt-get install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo install ifconfig cmd into ubuntu success .....
CMD /bin/bash编写完成之后将其构建成docker镜像。 命令
# 注意定义的TAG后面有个空格空格后面有个点
# docker build -t 新镜像名字:TAG .
docker build -t ubuntu:1.0.1 .虚悬镜像 虚悬镜像仓库名、标签名都是 的镜像称为 dangling images虚悬镜像。 在构建或者删除镜像时可能由于一些错误导致出现虚悬镜像。 例如# 构建时候没有镜像名、tag docker build . 虚悬镜像一般是因为一些错误而出现的没有存在价值可以删除
# 删除所有的虚悬镜像
docker image prune构建
暂时为空
docker network
docker安装并启动服务后会在宿主机中添加一个虚拟网卡。 在Docker服务启动前使用 ifconfig 或 ip addr 查看网卡信息 ● ens33或eth0本机网卡 ● lo本机回环网络网卡 ● 可能有virbr0CentOS安装时如果选择的有相关虚拟化服务就会多一个以网桥连接的私网地址的virbr0网卡作用是为连接虚拟网卡提供NAT访问外网的功能。如果要移除该服务可以使用 yum remove libvirt-libs.x86_64 使用 systemctl start docker启动Docker服务后会多出一个 docker0 网卡。 作用 ● 容器间的互联和通信以及端口映射 ● 容器IP变动时候可以通过服务名直接网络通信而不受到影响 Docker容器的网络隔离是通过Linux内核特性 namespace和 cgroup 实现的
docker网络命令
查看Docker网络模式docker network ls 如果没有修改过docker network则默认有3个网络模式 ● bridge ● host ● none 添加Docker网络 docker network add xxx 删除Docker网络 docker network rm xxx 查看网络元数据 docker network inspect xxx 删除所有无效的网络 docker network prune Docker 网络模式 Docker 的网络模式 网络模式 简介 使用方式 bridge为每一个容器分配、设置IP等并将容器连接到一个docker0虚拟网桥默认为该模式 --network bridge host 容器将不会虚拟出自己的网卡、配置自己的IP等而是使用宿主机的IP和端口 --network host none 容器有独立的 Network namespace但并没有对齐进行任何网络设置如分配 veth pari和 网桥连接、IP等 container 新创建的容器不会创建自己的网卡和配置自己的IP而是和一个指定的容器共享IP、端口范围等 查看某个容器的网络模式 通过inspect获取容器信息最后20行即为容器的网络模式信息 docker inspect 容器ID | tail -n 20 透过生活进入生命