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/dockervim /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 DockerFileFROM 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.phpconnect('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】快速入门

    推荐阅读