Linux安装docker

Linux安装docker

  1. 作者QQ:67065435 QQ群:821635552

docker安装

  1. docker安装前的准备

    # 查看内核版本
    uname -r
    
    # 移除旧版本docker
    yum remove docker \
    docker-ce \
    docker-common \
    docker-logrotate \
    docker-client \
    docker-client-latest \
    docker-latest \
    docker-latest-logrotate \
    docker-engine \
    docker-selinux \
    docker-engine-selinux \
    -y
    
    # 安装依赖
    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 install -y docker-ce
    
  3. docker换源并更换存储路径

    mkdir /data
    mkdir /etc/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. 网易云无法启动docker问题

    # Ubuntu & Debian
    sudo apt-get install bridge-utils -y
    sudo brctl show
    sudo brctl addbr docker0
    sudo ifconfig docker0 172.17.0.1/16
    sudo ifconfig docker0 up
    sudo systemctl start docker
    
    # CentOS
    yum install bridge-utils -y
    brctl show
    brctl addbr docker0
    ifconfig docker0 172.17.0.1/16
    ifconfig docker0 up
    systemctl start docker
    
    # 原文链接
    https://www.163yun.com/help/documents/56874253316968448
    
  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
    
  4. docker-compose

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创建镜像

  1. docker创建DockerFile

    mkdir /root/image
    cd /root/image
    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下载镜像并命名为image:1.0

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

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

    docker exec -i -t image /bin/bash
    
  5. docker在名为image的容器中安装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.' image 2233466866/image:1.0
    
  8. docker提交打包镜像到docker hub

    docker push 2233466866/image:1.0
    
  9. docker通过本地2233466866/image: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/image:1.0
    
  10. docker连接到test容器查看服务运行情况

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

我的镜像

  1. 2233466866/lnmp

  2. 2233466866/lnnp

  3. 2233466866/centos

  4. 2233466866/centos8

docker之Dockerfile入门

  1. 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触发器,即:当你的镜像被作为基础镜像时会触发指定动作
    

docker run --link的理解

  1. Link的理解
    # 1. 下载redis镜像
    docker pull redis:latest
    
    # 2. 通过redis镜像运行一个redis容器
    docker run -dit --name=redis redis:latest
    
    # 3. 下载lnmp镜像
    docker pull 2233466866/lnmp:latest
    
    # 4. 通过lnmp镜像运行一个lnmp容器并link到redis
    docker run -dit \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --privileged=true \
    --link=redis \
    --name=lnmp \
    2233466866/lnmp
    
    # 5. 进入lnmp容器
    docker exec -it lnmp bash
    
    # 6. 创建一个php文件
    vim test.php
    
    connect('redis', 6379);
    $redis->set('a', '123');
    echo $redis->get('a');
    
    ESC
    :wq
    
    # 7. 运行php文件
    php test.php
    
    # 8. 可以看到运行结果输出了123
    

Docer-compose

  1. 官方教程

  2. 快速入门

你可能感兴趣的:(Linux安装docker)