Docker应用镜像容器

docker安装

  1. docker安装前的准备

     # 查看内核版本
     uname -r
    
     # 移除旧版本docker
     yum remove docker \
     docker-common \
     docker-logrotate \
     docker-client \
     docker-client-latest \
     docker-latest \
     docker-latest-logrotate \
     docker-selinux \
     docker-engine \
     docker-engine-selinux \
    
     # 安装依赖
     yum install -y lvm2 yum-utils device-mapper-persistent-data
    
     # 添加docker源,更新yum缓存
     yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     yum makecache fast
    
  2. docker安装

     yum -y install docker-ce
    
  3. docker换源并更换存储路径

     vim /etc/docker/daemon.json
    
     {
       "registry-mirrors": [
         "https://pee6w651.mirror.aliyuncs.com",
         "https://y0qd3iq.mirror.aliyuncs.com",
         "https://registry.docker-cn.com",
         "http://hub-mirror.c.163.com"
       ],
       "graph": "/data/docker"
     }
    
     ESC
     :wq
    
  4. 移动默认路径文件到设定路径

     mkdir /data/
     mv /var/lib/docker /data/docker
    
  5. docker启动停止

     # 启动docker
     systemctl start docker
     # 重启docker
     systemctl restart docker
     # 停止docker
     systemctl stop docker
     # 开机运行docker
     systemctl enable docker
     # 开机不运行docker
     systemctl disable docker
    

docker卸载

  1. docker停止

     systemctl disable docker
    
  2. docker移除

     yum remove docker-ce
    
  3. docker目录移除

     rm -rf /data/docker
    

docker镜像修改/查看改动/提交

  1. docker拷贝主机文件到容器

     docker cp [主机目录/主机文件] [容器id/容器名称]:[容器目录/容器文件]
    
  2. docker查看容器改动

     docker diff [容器id/容器名称]
    
  3. docker镜像创建

     docker commit -a [镜像作者] -m [镜像说明] [容器id/容器名称] [创建的镜像的名字]:[创建的镜像的版本(TAG标签)]
    
  4. docker拉取镜像(可以忽略TAG标签,则docker取latest版本)

     docker pull [镜像名称]:[TAG标签]
     # 参数说明
     -a                      拉取指定镜像名称下所有TAG的镜像
     --disable-content-trust 拉取镜像时忽略校验,默认开启
    
  5. docker提交镜像

     docker push [镜像名称]:[TAG标签]
     # 参数说明
     --disable-content-trust 提交镜像时忽略校验,默认开启
    
  6. docker搜索镜像

     docker search [搜索关键词]
     # 参数说明
     --automated     只列出automated类型的镜像
     --no-trunc      显示完整的镜像描述
     -s [数字]       最大搜索结果数
    
  7. docker为镜像添加一个新名称+新标签

     docker tag [原镜像名称]:[原TAG标签] [新镜像名称]:[新TAG标签]
    
  8. docker登录/退出DockerHub

     # 登录
     docker login -u [用户名] -p [密码] [仓库地址(不声明则取默认)]
     # 退出
     docker logout [仓库地址(不声明则取默认)]
    
  9. docker镜像管理

     # 镜像列表
     docker images
    
     # 下载镜像(可以忽略TAG标签,则docker取latest版本)
     docker pull [镜像名称]:[TAG标签]
     # 参数说明
     -a                      拉取指定镜像名称下所有TAG的镜像
     --disable-content-trust 拉取镜像时进行校验
    
     # 下载镜像(示例)
     docker pull nginx
     docker pull php:7.3-fpm
    
     # 删除镜像(要先删除镜像下所有的容器)
     docker rmi [镜像id/镜像名称/镜像名称:TAG标签]
    
     # 删除镜像(示例)
     docker rmi nginx
     docker rmi php:7.3-fpm
    

docker容器管理(容器是通过镜像生成的)

  1. docker容器管理

     # docker通过镜像运行一个容器(可以忽略TAG标签,则docker取latest版本)
     docker run \
     -d -i -t \
     -p [服务器端口]:[docker端口] \
     -p [服务器端口]:[docker端口] \
     -p [服务器端口]:[docker端口] \
     -v [主机目录]:[容器目录] \
     -v [主机目录]:[容器目录] \
     -v [主机目录]:[容器目录] \
     --name=[容器名称(随便起名)] \
     --privileged=[true|false] \
     [镜像名称]:[TAG标签] \
     [脚本命令]
    
     # docker通过镜像创建一个容器(用法同run,只是创建后容器不会运行)
     docker create \
     -d -i -t \
     -p [服务器端口]:[docker端口] \
     -p [服务器端口]:[docker端口] \
     -p [服务器端口]:[docker端口] \
     -v [主机目录]:[容器目录] \
     -v [主机目录]:[容器目录] \
     -v [主机目录]:[容器目录] \
     --name=[容器名称(随便起名)] \
     --privileged=[true|false] \
     [镜像名称]:[TAG标签] \
     [脚本命令]
    
     # docker在容器内运行命令
     docker exec [容器id/容器名称] [命令行]
    
     # docker查看运行容器
     docker ps
    
     # docker查看所有容器
     docker ps -a
    
     # docker移除容器(要先停止容器)
     docker rm [容器id/容器名称]
    
     # docker杀死容器
     docker kill [容器id/容器名称]
    
     # docker停止容器
     docker stop [容器id/容器名称]
    
     # docker启动容器
     docker start [容器id/容器名称]
    
     # docker重启容器
     docker restart [容器id/容器名称]
    
     # docker暂停容器中进程
     docker pause [容器id/容器名称]
    
     # docker恢复容器中进程
     docker unpause [容器id/容器名称]
    
     # docker查看容器进程
     docker top [容器id/容器名称]
    
     # docker连接到容器(运行中)
     docker attach [容器id/容器名称]
    
     # docker查看容器端口
     docker port [容器id/容器名称]
    
     # docker查看容器日志
     docker logs [容器id/容器名称]
    
     # docker查看容器进程
     docker top [容器id/容器名称]
    
     # docker检查容器状态
     docker inspect [容器id/容器名称]
    
     # docker实时事件查看
     docker events \
     -f 'image'=[镜像id/镜像名称] \
     -f 'container'=[容器id/容器名称] \
     --since=[十位秒数时间戳/日期YYYY-MM-DD] \
     --until=[十位秒数时间戳/日期YYYY-MM-DD]
         # 参数说明
         -f      事件通过条件过滤
         --since 事件通过开始时间过滤
         --until 事件通过结束时间过滤
    
  2. docker创建并运行容器示例

     # 示例:通过镜像运行容器
     docker run \
     -d -i -t \
     -p 80:80 \
     -p 443:443 \
     -v /www/:/www/ \
     -v /etc/letsencrypt/:/etc/letsencrypt/ \
     -v /usr/local/nginx/logs/:/etc/nginx/logs/ \
     -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
     --name=nginx-web \
     --privileged=true \
     nginx
    
     # 参数说明
         # 进行端口映射时,请先保证端口未被占用
         # 进行路径映射时,请保证路径的正确性
     -v [主机路径]:[容器路径]
     -p [主机端口]:[容器端口]
    

docker创建lnmp集成镜像

  1. docker创建DockerFile

     mkdir /root/lnmp
     cd /root/lnmp
     vim DockerFile
    
     FROM centos:7
     ENV container docker
     RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
     rm -f /lib/systemd/system/multi-user.target.wants/*;\
     rm -f /etc/systemd/system/*.wants/*;\
     rm -f /lib/systemd/system/local-fs.target.wants/*; \
     rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
     rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
     rm -f /lib/systemd/system/basic.target.wants/*;\
     rm -f /lib/systemd/system/anaconda.target.wants/*;
     VOLUME [ "/sys/fs/cgroup" ]
     CMD ["/usr/sbin/init"]
    
     ESC
     :wq
    
  2. docker下载镜像并命名为lnmp:1.0

     cd /root/lnmp
     docker build --rm -t lnmp:1.0 .
    
  3. docker通过lnmp:1.0镜像生成一个名为lnmp的容器

     docker run \
     -d -i -t \
     -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
     --name=lnmp \
     --privileged=true \
     lnmp:1.0
    
  4. docker连接到名为lnmp的容器

     docker exec -i -t lnmp /bin/bash
    
  5. docker在名为lnmp的容器中安装nginx、mysql、php

     wget http://xxx.xxx.xxx/xxx.tar.gz
     tar -zxvf xxx.tar.gz
     cd xxx
     ./configure
     make
     make install
     ...
     # 通过systemd来管理服务的运行和开机启动
     systemctl xxxxxxx
     ...
     exit
    
  6. docker登录

     docker login -u [账号] -p [密码]
    
  7. docker将容器打包到一个新镜像

     docker commit -a 'ZhihuanGeng' -m 'CentOS LNMP IMAGE.Systemd enable.' lnmp 2233466866/lnmp:1.0
    
  8. docker提交打包镜像到docker hub

     docker push 2233466866/lnmp:1.0
    
  9. docker通过本地2233466866/lnmp:1.0镜像运行一个test容器

     docker run \
     -d -i -t \
     -p 80:80 \
     -p 443:443 \
     -p 3306:3306 \
     -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
     --name=test \
     --privileged=true \
     2233466866/lnmp:1.0
    
  10. docker连接到test容器查看服务运行情况

     docker exec -i -t test /bin/bash
     ps aux|grep php
     ps aux|grep mysql
     ps aux|grep nginx
    

docker之Dockerfile入门

  1. 因为这篇文章翻译的比较到位所以拿来做参考文档

  2. Dockerfile语法

     # FROM语法
     FROM scratch
     FROM [镜像名称]
     FROM [镜像名称]:[TAG标签]
     FROM [镜像名称]@[镜像id]
     # FROM作用
     FROM 用来指定你要构建的镜像基于哪个镜像,如果不基于任何镜像则使用scratch
    
     # MAINTAINER语法
     MAINTAINER [维护者名称]
     # MAINTAINER作用
     MAINTAINER 用来声明维护者名称
    
     # RUN语法
     RUN [命令1] [参数1] [参数2]
     RUN ["[命令2]", "[参数1]", "[参数2]"]
     RUN ["[命令3]", "[参数1]", "[参数2]", "[参数3]"]
     # RUN作用
     RUN 用来在构建镜像时,按序执行一组命令
    
     # ADD语法
     ADD [主机目录/文件1] [镜像目录/文件1]
     ADD ["[主机目录/文件2]","[镜像目录/文件2]"]
     # ADD作用
     ADD 用来将主机目录、主机文件或网络资源添加到要生成的镜像中,如果是tar文件则会将解压后的文件添加到要生成的镜像中,网络压缩资源不会解压
    
     # COPY语法
     COPY [主机目录/文件1] [镜像目录/文件1]
     COPY ["[主机目录/文件2]","[镜像目录/文件2]"]
     # COPY作用
     COPY 用来将主机目录、主机文件或网络资源添加到要生成的镜像中
    
     # CMD语法
     CMD [命令1] [参数1] [参数2]
     CMD ["[命令2]", "[参数1]", "[参数2]"]
     CMD ["[命令3]", "[参数1]", "[参数2]", "[参数3]"]
     # CMD作用
     CMD 用来在启动容器时,按序执行一组命令
    
     # ENTRYPOINT语法
     ENTRYPOINT [命令1] [参数1] [参数2]
     ENTRYPOINT ["[命令2]", "[参数1]", "[参数2]"]
     # ENTRYPOINT作用
     ENTRYPOINT 用来配置容器使其可执行化
    
     # LABEL语法
     LABEL [元数据1=值1] [元数据2=值2]
     # LABEL作用
     LABEL 用来为镜像添加元数据
    
     # ENV语法
     ENV [环境变量1=值1] [环境变量2=值2]
     # ENV作用
     ENV 用来设置环境变量
    
     # EXPOSE语法
     EXPOSE [端口1] [端口2]
     # EXPOSE作用
     EXPOSE 用来指定于外界交互的端口
    
     # VOLUME语法
     VOLUME ["[主机目录1]","[主机目录2]"]
     # VOLUME作用
     VOLUME 用来持久化目录映射到容器让所有容器共享,修改卷不会修改容器本身
    
     # WORKDIR语法
     WORKDIR [镜像目录]
     # WORKDIR作用
     WORKDIR 用来指定当前工作目录
    
     # USER语法
     USER root
     # USER作用
     USER 用来指定运行容器时的用户名
    
     # ARG语法
     ARG [变量名1=值1] [变量名2=值2]
     # ARG作用
     ARG 用于指定传递给构建运行时的变量
    
     # ONBUILD语法
     ONBUILD [触发器动作]
     ONBUILD CMD ["curl","http://xxx.xxx.xxx/send_email?content=xxx"]
     # ONBUILD作用
     ONBUILD 用于设置镜像FROM触发器,即:当你的镜像被作为基础镜像时会触发指定动作
    

results matching ""

    No results matching ""