1. Docker概念:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。
1.1 Docker的组成:
Docker Client客户端:用于与服务端交互,管理镜像和容器。
Docker Daemon守护进程:在宿主主机后台运行的一个进程,接受来自客户的请求,并处理这些请求(创建、运行容器等)。
1.2 Docker的三个概念:
镜像:Docker的镜像可以理解为只读模板,容器基于镜像启动。
容器:Docker的容器是基于镜像启动后的一个具体应用实例(进程),有系统容器和应用容器。
仓库:仓库是存放镜像的地方,有公开仓库(Public)和私有仓库(Private)两种形式。
2. Docker架构:
3. docker部署:
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
### 安装:
yum install docker-ce -y
### 启动:
systemctl start docker
### 查看docker版本,可以看到client和server的纤细信息,如果只能看到client的,则表示docker服务没有启动:
[root@node1 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:56:35 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.6
GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
runc:
Version: 1.0.0-rc95
GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
docker-init:
Version: 0.19.0
GitCommit: de40ad0
3.1 前期准备:
docker默认是从docker官方镜像仓库拉取所需镜像的,国内拉取比较慢,所以可以指定国内的镜像仓库。
### 创建daemon配置文件:
[root@node1 ~]# cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
EOF
### 然后重启服务:
systemctl daemon-reload
systemctl restart docker
4. docker常用命令:
4.1 搜索镜像:
docker search nginx
4.2 拉取镜像:
### 如果不指定版本,默认拉取最新的版本:
docker pull nginx
或者,指定版本:
docker pull nginx:1.18.0
4.3 查看本地镜像:
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08b152afcfae 45 hours ago 133MB
nginx 1.18.0 c2c45d506085 3 months ago 133MB
4.4 运行容器:
[root@node1 ~]# docker run -d --name nginx_v1 -p 80:80 nginx:1.18.0
96c6e090a1f0226e881e7ba550cf7880b56758d17e8070aeb3f1d367119fb650
-d: 后台模式,容器在后台运行,如果去掉,容器直接在前台运行,会占用当前bash进程。
--name: 容器名字,如果不指定,系统会自动分配一个名字。进入容器,可以用容器名字或者容器id进入。
-p: 端口映射,将容器的80端口映射到物理机的80端口上,容器启动后,可以直接访问物理机的ip:80
nginx:1.18.0 指定镜像,如果不带版本,则选择最新的镜像。如果指定镜像本地没有,则直接在远程服务器拉取。
4.5 检查容器状态:
### 查看容器,STATUS为up,则表示启动成功:
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96c6e090a1f0 nginx:1.18.0 "/docker-entrypoint.…" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx_v1
### 如果启动后,没有看到容器,可以使用docker ps -a, 看到Exited,则表示容器已经退出(停止):
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96c6e090a1f0 nginx:1.18.0 "/docker-entrypoint.…" 40 minutes ago Exited (0) 40 seconds ago nginx_v1
# 访问容器的web服务,如果看到200的状态码,则表示访问成功:
[root@node1 ~]# curl 192.168.75.121 -I
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 24 Jul 2021 07:47:31 GMT
Content-Type: text/html
4.6 进入容器:
### 进入容器:
[root@node1 ~]# docker exec -it nginx_v1 /bin/bash
root@96c6e090a1f0:/#
-i 打开标准输入,与容器交互,不添加,则无法交互。
-t 提供一个虚拟终端tty界面。
4.7 退出容器:
### 退出容器:
[root@node1 ~]# docker exec -it nginx_v1 /bin/bash
root@96c6e090a1f0:/# exit
exit
[root@node1 ~]#
4.8 停止容器:
### 关闭容器:
[root@node1 ~]# docker stop nginx_v1
nginx_v1
# 可以看到容器已经退出:
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96c6e090a1f0 nginx:1.18.0 "/docker-entrypoint.…" 40 minutes ago Exited (0) 40 seconds ago nginx_v1
[root@node1 ~]#
4.9 重新启动容器:
[root@node1 ~]# docker start nginx_v1
nginx_v1
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96c6e090a1f0 nginx:1.18.0 "/docker-entrypoint.…" 50 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx_v1
4.10 复制文件到容器:
### 创建测试文件:
[root@node1 ~]# echo "this is docker page" > index.html
# 复制普通文件和目录是一样的,不需要加递归参数:
[root@node1 ~]# docker cp index.html nginx_v1:/usr/share/nginx/html/
[root@node1 ~]# curl 192.168.75.121
this is docker page
[root@node1 ~]#
# 复制时保留文件属性:
docker cp -a index.html nginx_v1:/usr/share/nginx/html/
# 复制链接文件:
docker cp -L links nginx_v1:/tmp/
4.11 查看容器日志:
# 打印所有日志(慎用):
[root@node1 ~]# docker logs nginx_v1
# 打印最后一行日志:
[root@node1 ~]# docker logs nginx_v1 -n 1
192.168.75.121 - - [24/Jul/2021:08:41:14 +0000] "GET / HTTP/1.1" 200 20 "-" "curl/7.29.0" "-"
# 实时打印容器日志,等同于tailf命令:
[root@node1 ~]# docker logs -f nginx_v1
4.12 实时显示容器资源使用情况:
### 实时显示指定容器资源使用情况,退出使用Ctrl + c:
[root@node1 ~]# docker stats nginx_v1
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
96c6e090a1f0 nginx_v1 0.00% 1.418MiB / 3.84GiB 0.04% 1.29kB / 678B 0B / 0B 2
# 实时显示所有启动的容器的资源使用情况:
[root@node1 ~]# docker stats -a
# 不实时显示,只显示第一个值:
[root@node1 ~]# docker stats --no-stream nginx_v1
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
96c6e090a1f0 nginx_v1 0.00% 1.418MiB / 3.84GiB 0.04% 1.29kB / 678B 0B / 0B 2
[root@node1 ~]#
4.13 列出容器内的进程信息:
[root@node1 ~]# docker top nginx_v1
UID PID PPID C STIME TTY TIME CMD
root 3837 3817 0 16:30 ? 00:00:00 nginx: master process nginx -g daemon off;
101 3884 3837 0 16:30 ? 00:00:00 nginx: worker process
4.14 列出容器的端口映射:
[root@node1 ~]# docker port nginx_v1
80/tcp -> 0.0.0.0:80
80/tcp -> :::80
4.15 将容器提交为新的镜像:
docker镜像的制作,docker commit只是方式之一,后面用的单独文章写Dockerfile制作。
### 基于修好后的容器,提交为新的镜像:
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
[root@node1 ~]# docker commit -a "author: lutixia website:www.lutixia.cn" -m "change default index file" nginx_v1 lutixia/nginx:v1
sha256:1511d1b5355967db7ca5eb7cef7de1a148dd931cf0a996bb9a28e43a4a6a92ed
-a: 设置作者信息
-m: 提交信息
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lutixia/nginx v1 1511d1b53559 3 seconds ago 133MB
nginx latest 08b152afcfae 47 hours ago 133MB
nginx 1.18.0 c2c45d506085 3 months ago 133MB
### 基于新的nginx镜像,启动新的容器:
[root@node1 ~]# docker run -d --name nginx_v2 -p 81:80 lutixia/nginx:v1
22c250758dc5f486a1efe28055e765d50dfaa8a13d490372941236acb07a8c23
[root@node1 ~]#
[root@node1 ~]# curl 192.168.75.121:81
this is docker page
欢迎点赞,收藏,你的喜欢就是我原创的动力,Docker系列将会持续更新。
针对部分知友咨询的镜像下载,常用软件下载,以及Linux相关的电子书,可以到该站点下载。
资源下载地址
好啦,正在学习路上的小伙伴们可以愉快的去下载想要的资料啦。