中文文档 https://yeasy.gitbook.io/docker_practice/container/run

安装Docker CE

Docker有两个版本分支,Docker CE和Docker EE,即社区版和企业版。 一般使用 CE 社区版,因为免费

前提
下面全部操作是在 centos7 进行的,非 centos6 ,需要注意,因为如镜像加速的设置会有所区别

如果有安装旧版本,需要卸载旧版本

  1. yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine

1. 安装Docker的依赖库。

yum-utils 提供yum-config-manager功能,另两个是 devicemapper 驱动依赖

  1. yum install -y yum-utils device-mapper-persistent-data lvm2

2. 添加Docker CE的软件源信息。

  1. //选择设置阿里仓库的yum源,国外的很慢会导致问题
  2. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
  3. yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

3. 安装Docker CE。

  1. yum makecache fast //更新yum软件包索引
  2. yum -y install docker-ce //安装docker-ce

4. 启动Docker服务。

  1. systemctl start docker

5. 测试

  1. docker version
  2. docker run hello-world

查看版本

  1. docker -v
  2. docker info

其他命令

  1. //设置并开启自启
  2. systemctl start docker
  3. systemctl enable docker
  4. //重新加载服务配置文件
  5. systemctl daemon-reload
  6. //重启Docker服务
  7. systemctl restart docker
  8. //卸载docker
  9. systemctl stop docker
  10. yum -y remove docker-ce
  11. rm -rf /var/lib/docker

暂时不知道下面命令干嘛的 已解决

  1. yum install -y docker-io //io centos6版本中需要安装的 2021.8.15补充

配置镜像加速

阿里云镜像获取地址,登录后复制加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
image.png

  1. mkdir -p /etc/docker //-p 确保目录名称存在,不存在的就建一个。
  2. vim /etc/docker/daemon.json
  3. #网易云
  4. {"registry-mirrors": ["http://hub-mirror.c.163.com"] }
  5. #阿里云
  6. {
  7. "registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"]
  8. }
  9. systemctl daemon-reload
  10. systemctl restart docker

查看是否配置成功

  1. $ docker info
  2. Registry Mirrors:
  3. https://reg-mirror.qiniu.com

image.png

阿里云加速

整个小节已经没用了

  1. $ sudo yum install -y yum-utils

执行下面的命令添加 yum 软件源:

  1. $ sudo yum-config-manager \
  2. --add-repo \
  3. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. (备注:上述的 \ 是换行的意思)
  5. $ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
  6. # 官方源
  7. # $ sudo yum-config-manager \
  8. # --add-repo \
  9. # https://download.docker.com/linux/centos/docker-ce.repo

使用Docker安装Nginx服务

  1. 查看Docker镜像仓库中Nginx的可用版本。

    1. docker search nginx

    命令输出如下所示:
    Docker - 图3

  2. 拉取最新版的Nginx镜像。

    1. docker pull nginx:latest

    命令输出如下所示:
    Docker - 图4

  3. 查看本地镜像。

    1. docker images

    命令输出如下所示:
    Docker - 图5

  4. 运行容器。

    1. docker run --name nginx-test -p 8080:80 -d nginx

    命令参数说明:

  • —name nginx-test:容器名称。
  • -p 8080:80: 端口进行映射,将本地8080端口映射到容器内部的80端口。
  • -d nginx: 设置容器在后台一直运行。

命令输出如下所示:
Docker - 图6

  1. 在浏览器地址栏输入http://<ECS公网地址>:8080访问Nginx服务。
    Docker - 图7

image

  • Docker 把应用程序及其依赖,打包在image文件里面,只有通过这个文件,才能生成Docker容器
  • image文件可以看作是容器的模板
  • 同一个image文件,可以生成多个同时运行的容器实例
  • 一个image文件往往通过继承另一个image文件,加上一些个性化设置而生成 | 命令 | 含义 | 案例 | | —- | —- | —- | | image | 查看全部镜像 | docker image ls | | pull | 拉取镜像 | docker pull [imageName] | | rm | 删除镜像 | docker rm [imageName] |

查找镜像

命令 或者 dockerhub

  1. docker search xxx [/ngnix]

查看镜像

  1. docker images
  2. or
  3. docker image ls

列表包含了 仓库名标签镜像 ID创建时间 以及 所占用的空间

拉取镜像

  1. $ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
  2. 例:docker pull nginx:latest

删除镜像

  1. docker rmi [image]
  2. or
  3. docker image rm [选项] <镜像1> [<镜像2> ...]

容器

容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

  • docker run 命令会从 image 文件,生成一个正在运行的容器实例
  • 如果本地没有指定的image文件,会从仓库自动抓取

    新建容器

注意:下面是 交互式容器

  1. //新建并启动容器
  2. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  3. //参数说明
  4. --name="容器新名字": 为容器指定一个名称;
  5. -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
  6. -i:以交互模式运行容器,通常与 -t 同时使用;
  7. -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  8. -P: 随机端口映射;
  9. -p: 指定端口映射,有以下四种格式
  10. ip:hostPort:containerPort
  11. ip::containerPort
  12. hostPort:containerPort
  13. containerPort
  14. //示例
  15. 使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
  16. docker run -it centos /bin/bash

简洁版:

  1. docker exec -it 【容器id /bin/bash
  2. #参数说明
  3. -it 交互模式
  4. -t Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
  5. -i 让容器的标准输入保持打开
  6. /bin/bash 启动一个bash终端

容器命令

进入容器

  1. docker run ubuntu /bin/echo "Hello"

查看容器

  1. docker ps -a 所有的(包含已停止的)
  2. docker ps -l 最新的
  3. docker ps 正在运行的

启动容器

  1. docker start 容器ID或容器名 //启动一个已经停止的容器实例
  2. docker restart 容器ID或容器名

停止容器

  1. docker stop 容器ID或容器名 //停止正在运行的容器

强制停止容器

  1. docker kill 容器ID或容器名 :直接关闭容器

删除容器

  1. docker rm 容器ID
  2. 一次性删除多个容器
  3. docker rm -f $(docker ps -a -q)
  4. docker ps -a -q | xargs docker rm

退出容器

  1. //两种方式,可以通过 docker ps 查看退出后容器状态
  2. exit 容器停止并退出
  3. ctrl+P+Q 容器不停止并退出

其它说明

  1. exec 在容器中执行一条命令
  2. run 在一个新的容器中执行一条命令

重要

守护式容器

  1. docker run -d 容器名
  2. #使用镜像centos:latest以后台模式启动一个容器
  3. docker run -d centos

查看容器日志

  1. docker logs -f -t --tail 容器ID
  2. * -t 是加入时间戳
  3. * -f 跟随最新的日志打印
  4. * --tail 数字 显示最后多少条

查看容器内运行的进程

  1. docker top 容器ID

查看容器内部细节

  1. docker inspect 容器ID

进入正在运行的容器并以命令行交互

  1. docker exec -it 容器ID /bin/bash
  2. 重新进入
  3. docker attach 容器ID
  4. 区别
  5. attach 直接进入容器启动命令的终端,不会启动新的进程
  6. exec 是在容器中打开新的终端,并且可以启动新的进程

从容器内拷贝文件到主机上

  1. docker cp 容器ID:容器内路径 目的主机路径
  2. //示例
  3. docker cp 9fabae847630:/text.txt /tmp

问题记录

privileged参数

  1. $ docker help run
  2. ...
  3. --privileged=false Give extended privileges to this container

大约在0.6版,privileged被引入docker
使用该参数,container内的root拥有真正的root权限
否则,container内的root只是外部的一个普通用户权限
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount
甚至允许你在docker容器中启动docker容器

拓展:需要使用此参数的原因是因为使用了 selinux CentO 安装包
文章 文章

重启 docker 服务报错

问题场景:docker 启动出错
image.png

Job for docker.service failed because start of the service was attempted too often. See “systemctl status docker.service” and “journalctl -xe” for details.To force a start use “systemctl reset-failed docker.service” followed by “systemctl start docker.service” again.

*首先需要注意 daemon.json 里的格式不能出现错误,要符合json格式,否则启动失败
(我在设置镜像加速地址的时候 因为首行留空了,所以出错)

其次 如果还启动不成功,那么需要按照提示进行操作

  1. [root@iz8vb88cvk2es0yt2lsx6sz ~]# systemctl reset-failed docker
  2. [root@iz8vb88cvk2es0yt2lsx6sz ~]# systemctl start docker