目录
名词概念
- 镜像:Docker 的镜像,就好比我们 Java 中的类一样,通过类我们可以创建多个对象。也可以想,重装系统的时候,我们往往需要一个 Windows 镜像或 Linux 系统镜像,这时候镜像像一个文件系统,利用这些即可在我们电脑上安装一个系统。
- 容器
- 镜像和容器的关系,就像类和实例对象一样,镜像是静态的,容器是通过镜像运行时的实体,并且容器可以创建、启动、停止、删除、暂停等。
- 仓库
- 可以看出代码控制中心,比如 GitHub,Maven 等,简单的理解为存放镜像的地方
Docker 安装
Centos 安装
版本:
- CentOS 7 或更高
步骤:
卸载旧版本:
如果你之前用过,可能需要卸载旧的版本的相关依赖,旧的 Docker 版本称为 docker 或 docker-engine。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装:
首次安装的,在安装 Docker 前,需要设置 Docker 仓库。之后,您需要设置仓库,后面就可以通过仓库安装和更新 Docker
设置仓库:
首先需要安装所需的软件包,yum-config-manager 需要 yum-utils,device mapper 存储驱动需要 device-mapper-persisten-data 和 lvm2
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置仓库地址,我这里选择了阿里云的地址快一些
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker 的社区版
$ sudo yum install docker-ce docker-ce-cli containerd.io
如果提示您接受 GPG 密钥,请选是。
我们安装完后,Docker 是默认没有被启动的,并且还创建了 Docker 用户组,但是该组下面没有用户。
其他:
如果您需要安装指定的 Docker 社区版,可以列出可用版本,在选择安装。
$ yum list docker-ce --showduplicates | sort -r
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
* updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
然后通过其完整的软件包名称,安装特定版本,该软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-19.03.9。
$ sudo yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io
配置阿里云镜像加速:
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址和操作文档了。
启动 Docker :
$ sudo systemctl start docker
可以查看 Docker 版本看是否安装成功
[root@localhost ~]# docker version
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
测试 Hello World
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
卸载 Docker :
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默认工作路径!
常用命令
帮助命令
显示版本信息
docker version
显示 docker 的系统信息、镜像、容器数量
docker info
帮助命令
docker run --help
镜像命令
如果本地中,没有要运行的镜像,那么 docker 就会自动从 docker 镜像仓库中下载
命令 | 描述 |
---|---|
docker images | 查看所有本地主机上的镜像 |
docker search | 搜索镜像 |
docker pull | 下拉镜像 |
docker rmi | 删除镜像 |
列出镜像列表
docker images
命令格式:
docker images [OPTIONS] [REPOSITORY[:TAG]]
Options:
-a, --all Show all images (default hides intermediate images) #列出所有镜像
-q, --quiet Only show numeric IDs # 只显示镜像的id
例子:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
- **REPOSITORY:**表示镜像的仓库源
- **TAG:**镜像的标签,一个仓库源有多个 TAG,因为代表这个仓库源的不同版本(latest 是最新的版本)
- **IMAGE ID:**镜像ID
- **CREATED:**镜像创建时间
- **SIZE:**镜像大小
搜索镜像
使用 docker search
命令搜索镜像,比如搜索 MySQL
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10075 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3694 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 736 [OK]
-
NAME: 镜像仓库源的名称
-
DESCRIPTION: 镜像的描述
-
OFFICIAL: 是否 docker 官方发布
-
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
-
AUTOMATED: 自动构建。
下载镜像
使用 docker pull 镜像
命令下载,例如下载 centos 镜像
[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
删除镜像
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
比如删除 hello-world 镜像
docker rmi hello-world # 删除 hello-world 镜像
docker rmi -f 镜像id 镜像id 镜像id...# 删除多个镜像
docker rmi -f $(docker images -aq) # 显示所有镜像,然后当成参数传入并且删除
Options:
-f, --force 强制删除镜像
创建镜像
- 可以从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
容器命令
命令 | 描述 |
---|---|
docker run -itd centos /bin/bash | 创建容器并且启动,并以命令行模式进入容器,后台模式启动 |
docker ps | 列出所有运行中的容器 |
docker stop 容器id | 停止当前正在运行的容器 |
docker restart 容器id | 重启容器 |
docker rm 容器id | 删除容器 |
docker attach 容器ID | 进入容器 |
docker exec 容器ID | 进入容器 |
docker top 容器id | 查看容器中进程信息 |
docker logs 容器id | 查看日志 |
启动容器
使用 docker run
命令创建容器并且启动
docker run [options] image [command][ang...]
以 centos 镜像为例,参数以命令行的模式进入容器
[root@localhost ~]# docker run -it --name centos01 centos /bin/bash
[root@c6de240f0c94 /]#
参数说明:
-i
:交互式操作-t
:终端--name
:指定容器名centos
:centos 镜像/bin/bash
:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
退出当前容器到宿主机器,使用 exit 命令
[root@c6de240f0c94 /]# exit
exit
[root@localhost ~]#
列出所有运行中的容器
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6de240f0c94 centos "/bin/bash" 4 minutes ago Exited (0) About a minute ago elated_cray
e267483ae3fc hello-world "/hello" 2 days ago Exited (0) 2 days ago amazing_allen
96558d441131 hello-world "/hello" 2 days ago Exited (0) 2 days ago reverent_ganguly
参数说明:
-
-a:all ,显示所有容器
-
-n:last int,显示最后创建的n个容器(包括所有状态)(默认为-1)
-
-q:quiet,只显示 id
启动已经停止的容器
可以先通过docker start
查看停止的容器 id,在通过该 id 启动
[root@localhost ~]# docker start c6de240f0c94
c6de240f0c94
后台运行一个容器
我们大部分时候还是喜欢容器后台运行的,可以通过 -d 指定容器的运行模式
[root@localhost ~]# docker run -itd --name centos-test centos /bin/bash
632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
632b8174cb58 centos "/bin/bash" 9 seconds ago Up 8 seconds centos-test
c6de240f0c94 centos "/bin/bash" 20 minutes ago Up 4 minutes elated_cray
e267483ae3fc hello-world "/hello" 2 days ago Exited (0) 2 days ago amazing_allen
96558d441131 hello-world "/hello" 2 days ago Exited (0) 2 days ago reverent_ganguly
**注:**加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
停止一个容器
命令如下:
# docker stop 容器ID
$ docker stop 632b8174cb58
632b8174cb58
重启容器
停止的容器,可以通过 docker restart 容器ID
重启,命令如下:
$ docker restart 632b8174cb58
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach 容器ID
$ docker attach 632b8174cb58
- 使用该命令,如果从容器退出,则会直接导致容器停止
- 进入当前容器后开启一个新的终端,可以在里面操作。
docker exec 容器ID
docker exec -it 632b8174cb58 /bin/bash
- 使用该命令,如果从容器退出,则会直接导致容器停止
- 进入容器正在执行的终端
注:ctrl +P +Q 也可以容器不停止退出
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq) #删除指定的容器
docker ps -a -q|xargs docker rm
#删除所有的容器
查看日志
使用命令 docker logs
查看日志
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志
查看容器中进程信息
使用命令 docker top 容器id
[root@localhost ~]# docker top 632b8174cb58
UID PID PPID C STIME TTY TIME CMD
root 7657 7640 0 21:52 pts/0 00:00:00 /bin/bash
查看镜像的元数据
使用命令 ``docker inspect 容器id`
[root@localhost ~]# docker inspect 632b8174cb58
[
{
"Id": "632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9",
"Created": "2020-10-20T15:06:52.579572805Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 7657,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-10-21T13:52:57.417445702Z",
"FinishedAt": "2020-10-21T13:50:12.958002365Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9/resolv.conf",
..................................