Docker 安装及常用命令

CentOS7 安装 Docker 和 Docker-compose

安装 Docker:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

# 添加 docker 下载仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker-ce
sudo yum install docker-ce

# 启动 docker
sudo systemctl start docker

# 设置开机启动
sudo systemctl enable docker

# 验证
sudo docker --version

sudo docker run hello-world

Docker-CE: Docker Community Edition 社区免费版
Docker-EE: Docker Enterprice Edition 企业收费版

安装 Docker-compose:

1
2
3
4
5
# 下载最新稳定版 docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 分配可执行权限
chmod +x /usr/local/bin/docker-compose

Docker-compose 最新版本及安装方法参考 https://github.com/docker/compose/releases, https://docs.docker.com/compose/install/

Docker 相关命令

1
2
3
4
5
6
7
8
9
10
11
# 查看docker的所有命令
docker

# 查看单个docker命令的帮助,如docker ru --help
docker [command] --help

# Docker 环境查看
docker info

# Docker 服务对应的版本查看
docker version

镜像管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 搜索所有 centos 的 docker 镜像
docker search centos

# 从 Docker Hub 仓库下载一个 centos 操作系统的镜像
docker pull centos

# 查看 docker 镜像
docker images

# 删除本地镜像(在删除镜像之前需先用 docker rm 删除依赖于这个镜像的所有容器)
docker rmi 99a633ad346f

# 导出镜像到本地文件
docker save centos > /opt/centos.tar.gz

# 导入本地镜像到 docker 镜像库
docker load < /opt/centos.tar.gz

容器管理:

Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。启动容器有两种方式:

  1. 基于镜像新建一个容器并启动
  2. 将在终止状态(stopped)的容器重新启动

新建容器并启动:

1
2
3
4
5
# 和本地直接执行 /bin/echo 'Hello,World' 没有什么差别
docker run centos /bin/echo 'Hello,World!'

# 启动一个 bash 终端,允许用户进行交互
docker run --name mycentos -it centos /bin/bash
  • -i: 让容器的标准输入保持打开
  • -t: 让 Docker 分配一个伪终端,并绑定到容器的标准输入上
  • --name: 给容器定义一个名称
  • /bin/bash: 启动一个 bash 终端

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从地址池配置一个 ip 地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止

启动已终止的容器:

1
2
3
4
5
# 启动一个终止的容器
docker start mycentos

# 查看所有容器状态
docker ps -a

守护进程运行:

1
2
3
4
5
# -d 参数指定容器在后台以守护态运行
docker run -d centos /bin/bash -c 'while true; do echo "Hello,World!"; sleep 1;done'

# 查看容器的输出信息
docker logs a017e98a7ce8

终止容器:

可以使用 docker stop 来终止一个运行中的容器。

此外,当 Docker 容器中指定的应用终结时,容器也自动终止。 例如对于只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

终止状态的容器可以用 docker ps -a 命令看到,也可以通过 docker start <ID> 命令来启动容器。

其它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 以交互模式启动一个容器
docker run -it [容器ID或容器名称] /bin/bash

# -p 完整的参数为: -p ip:hostport:port,将当前物理机的 ip 的端口映射到容器的端口
docker run -d -p 5000:5000 training/webapp pythonapp.py

# 进入容器,一般对运行着的后台容器,执行该命令
docker exec -it [容器ID] /bin/bash

# 删除容器,正在运行的容器不能删除
docker rm [容器ID或容器名称]

# 强制删除正在运行的容器
docker rm -f [容器ID或容器名称]

# 一次性删除所有容器,慎用
docker rm $(docker ps -q -a)

# 强制终止容器
docker kill [容器ID或容器名称]

# 查看容器的具体信息
docker inspect [容器ID或容器名称]

# 快捷的方式查看容器的端口
docker port [容器ID或容器名称]

# 查看容器的日志
docker logs [容器ID或容器名称]

退出时,使用 [ctrl + D],这样会结束 docker 当前线程,容器结束,可以使用 [ctrl + P + Q] 退出而不终止容器运行

docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash 会在指定容器中执行指定命令,[ctrl+D] 退出后不会终止容器运行

参考资料: