Dokcer
一、contos Docker 安装 (关闭 firewalld 及selinux)
1、卸载旧版本

 # sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2、更新docker yum 源 不更新源,会默认安装老旧版docker

 # sudo yum install -y yum-utils
 # sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker 需要安装三个软件 docker-ce docker-ce-cli containerd.io

# sudo yum install docker-ce docker-ce-cli containerd.io

安装特定版本方式 :请在存储库中列出可用版本,然后选择并安装:
一个。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:

# yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
4、启动docker 验证 docker 是否安装成功

 #  sudo systemctl start docker

通过运行hello-world 映像来验证是否正确安装了docker

# sudo docker run hello-world

或者使用 docker version /--vesion 查看 docker 版本信息
docker info 查看docker 详细信息
二、docker image 管理

1、docker image 仓库地址配置(安装好docker后建议配置成国内的仓库地址)
docker 官方镜像仓库地址 https://hub.docker.com/explore 从中国访问一般比较慢
Docker 国内镜像地址 https://registry.docker-cn.com
修改docker 默认仓库址 vim /etc/docker/daemon.json

     {
       “registry-mirrors”:“[https://registry.docker-cn.com]”
       }

2、docker image 常用命令

命令 用法
docker image history [image-name] 查看镜像分层历史
docker image ls/list 查看本地镜像列表 (等价于 docker images)
docker image rm [image-name] 删除本地镜像
docker imgae tag 给本地镜像打标记
docker image pull 从默认仓库地址下载镜像
docker iamge prune 删除不在用的镜像
docker image save 导出(保存)本地镜像库镜像
docker image load 导入镜像
docker image import 导入容器文件系统tar归档文件创建镜像
docker export 导出容器文件系统到tar归档文件
docker image inspect 显示镜像详细信息


三、docker container 管理

1、创建容器命令: docker container run -itd --name container_name image_name
常用创建容器子命令(run)选项

选项 含义
-i 可以登录的交互式容器
-t 给容器分配一个tty 伪终端
-d 后台进行容器
--dns 设置DNS服务器
-e 设置变量,可以传入到容器中
--env-file list 从文件中读取环境变量
-p 发布容器端口到主机
-P 发布容器所有的EXPOSE端口到宿主机随机端口
-h 设置容器主机名
--ip 指定容器的IP,只能用于自定义网络
--link list 添加连接到另一个容器
--network 添加连接到一个网络
--mount 挂载宿主机分区到容器
-v, --volume list 挂载宿主机目录到容器
--restart string 容器退出时重启策略,默认no [always \ on-failure]
--add-host list 添加其他主机到容器中/etc/hosts
-m, --memory 容器可以使用的最大内存里
--memory-swap 交换分区的大小
--memonry-swappiness=<0-100> 容器使用SWAP分区的百分比(0-100,默认-1 不启用)
--memory-reservasion 内存软件限制,docker检测主机容器争用或内存不足时所激活的软 限制,使用此选项,值必须低于--memory,以使优先
--oom-kill-disable 当宿主机内存不足时,内核会杀死容器中的进程。建议设置--momery选项再禁用oom。如果没有设置,主机可能会耗尽内存
--cpus 限制容器使用宿主机的核心数
--cpuset-cpus 限制容器使用特定的CPU
--cpu-shares 此值设置为大于或小于默认1024值,以增加或减少容器的权重,并使其可以访问主机CPU周期更大或更小比例

2、docker container 常用管理子命令

子命令 用法
ls 列出在运行的容器,-a选项列出所有容器
inspect 显示一个或多个容器的详细信息
attach 附加本地标准输入、输出和错误到一个运行的容器(进入容器)
exec 在运行容器中执行命令
commit 以一个运行中的容器创建一个新的镜像
cp 宿主机与容器之间进行文件/文件夹的拷贝,用法: docker container cp 宿主机目录 container_name: 目录
logs 获取一个容器的日志
port 列出指定容器端口映射
stats 显示容器资源使用统计
top 显示一个容器运行的进程
update 更新一个或多个运行中容器的配置(内存、CPU)
stop/start 停止/启动一个或多个容器
rm 删除一个或多个容器

四、管理容器应用程序数据----将宿主机数据挂载到容器中
docker 提供三种不同方式将数据挂载到容器中:

方式 区别
volume 数据卷 宿主机数据卷存放目录 /var/lib/docker/volumes
bind mounts 可以将宿主机任意位置已经存在的文件挂载到容器中
tmpfs 将宿主机内存中的文件挂载到容器中,不写入宿主机的文件系统

1、volume
(1)volume 的创建与子命令

volume子命令 含义
create 创建一个数据卷 例:# docker volume create nginx-vol;数据会存放在宿主机目录/var/lib/docker/volumes中
inspect 显示数据卷的详细信息 例:# docker volume inspect nginx-vol
ls 显示宿主机上存放的数据卷列表
prune 删除所有不在用的数据卷
rm 删除一个或者多个数据卷

(2)volume 挂载:在创建容器时挂载volume到容器

docker container run -itd --name nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

(3)清理volume

# docker container stop nginx-test 
# docker container rm nginx-test
# docker volume rm  nginx-vol

2、bind mounts

 #  docker container run -itd --neme nginx-test1 --mount type=bind,src=宿主机目录,dst=/usr/share/nginx/html   nginx

注意:bind mounts 方式挂载文件目录时,会隐藏容器目标目录中的文件,只显示宿主机的源文件; 宿主机源文件不存在时,挂载时会报错
五、docker network
1、Docker 支持5种网络模式
(1)bridge
  默认网络,docker 启动后默认创建一个docker0网桥,默认创建的容也是添加到这个网桥中。
(2)host
 容器不会获得一个独立的network namespace,而是与宿主机共用一个
(3)none
 获取独立的network namespace ,但不为容器进行任何配置网络。
(4)container
  与指定的容器使用同一个network namespace,网上配置也是相同的
(5)自定义
  自己义网桥,默认与bridge网络一样。
注意:同一网络中的容器可以通过容器名或主机名进行相互访问,不需要再进行网络配置
2、docker network 子命令

子命令 作用
connect 连接一个容器,与其共用一个网络
create 创建一个网络
disconnect 断开与容器共用的网络
inspect 查看一个或多个网络的详细信息
ls 显示网络列表
prune 删除所有不在用的网络
rm 删除一个或者多个网络

六、通过Dockerfile构建docer 镜像
1、dockerfile 常用指令

指令 用法及含义
FORM 构建的镜像是基于哪个镜像,例如:FORM contos:7
MAINTAINER 镜像维护者姓名或邮箱地址,例如:MAINTAINER zhouzeheng
RUN 构建时运行的shell命令 例如:RUM [“yum”,”install”,”httpd”]   RUM yum install httpd
CMD 运行容器时运行的命令  例如:CMD [“-c”,”/start.sh”]  CMD [“/usr/sbin/sshd”,-D]   CMD /usr/sbin/sshd -D
EXPOSE 声明容器运行的服务端口,例如:EXPOSE 80 443
EVN 设置容器内环境变量,例如:EVN MYSQL_ROOT_PASSWORD 123456
ADD 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或解压,例如:ADD ...   ADD [“”,...””]   ADD https://www.aaa.com/html.tar.gz /var/www/html   ADD html.tar.gz /var/www/html
COPY 拷贝文件或目录到镜像,用法与ADD相当 例如:COPY /root/start.sh /start.sh
ENTRYPOINT 运行容器时执行的shell命令,例如 ENTRYPOINT [“/bin/bash”,”-c”,”/start.sh”]  ENTRYPOINT /bin/bash -c ‘/start.sh’
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器, 例如:VOLUME /var/lib/mysql
USER 为RUN、CDM和ENTRYPOINT执行命令指定运行用户, 例如: USER zhouzeheng
WORKDIR 配置容器工作目录,例如:WORKDIR /usr/share/nginx/html
HEALTHCHECK 健康检查,例如: HEALTHCHECK --interval=5m --timeout=3s --tetries=3 CMD curl -f http://locahost/ -o exit 1
ARG 在构建镜像时指定一些参数

ARG示例:

#在dockerfile里定议变量
 FROM  contos:7 
 ARG user
 USER  $user

 #docker image build --build-arg user=zhouzeheng Dockerfile 

2、Dockerfile apache 案例

    FROM                  centos:7
    MAINTAINER       zhouzeheng
    RUN                     yum install -y  gcc gcc-c++ make openssl-devel pcre-devel
    ADD                     nginx-1.18.0.tar.gz /tmp
    RUN                     cd /tmp/nginx-1.18.0 && \
                                ./configure  --prefix=/usr/local/nginx && \
                                make -j 2 && \
                                make install
    RUN                    rm -rf /tmp/nginx-1.18* && yum clean all
    EXPOSE             80
     CMD                   ["./usr/local/nginx/sbin/nginx", "-g", "daemon off;"]


3、使用Dockerfile 构建镜像

# docker image build [OPTIONS] PATH|URL|- 

OPTIONS:
-t, --tag list 指定镜像名称及版本号 name:tag
-f, --file string 指定Dockerfile文件位置,例如:

# docker image build   -t   nginx:V1  -f     /path/Dockerfile     /path(关联上下文目录)


七、私用仓库搭建

1.1 docker官方私有仓库 registry构建
(1)创建挂载目录

# mkdir /tmp/registry 

(2)拉取registry镜像

 # docker image pull registry

(3)创建registry容器

# docker run -itd  --name registry --mounts type=bind,\ src=tmp/registry,dst=/var/lib/registry -p 1000  :5000   --restart=always registry

(4)使用客户机访问刚创建的容器仓库

# curl  http://ip:1000/v2/_catalog

1.2 私有仓库管理
(1) 在客户机上配置私有仓库可信任,在/etc/docker/daemon.json 文件大括号中加入一行,
注意:行与行之间用英文逗号隔开

     “insecure-registries”:[“192.168.0.107:1000”]

(2)打标签

# docker tag nginx:1.0 192.168.0.107:1000/nginx:1.0

(3)上传镜像到私有仓库

# dokcer push 192.168.0.107:1000/nginx:1.0

(4)从私有仓库下载镜像

# dokcer pull 192.168.0.107:1000/nginx:1.0

(5)列出镜像标签

# curl  http://192.168.0.107:1000/nginx/tags/list