docker的配置与使用
1. 什么是docker
docker中的容器:
- lxc --> libcontainer --> runC
1.1 OCI&OCF
OCI
Open Container-initiative(开放容器倡议)
- 由Linux基金会主导于2015年6月创立
- 旨在围绕容器格式和运行时制定一个开放的工业化标准
- 包含两个规格:
- 运行时规范(runtime-spec)
- 形象规范(image-spec)
**OCF **
Open Container Format(开放式容器格式)
runC 是一个 CLI 工具,用于根据 OCI 规范生成和运行容器
- 容器作为 runC 的子进程启动,可以嵌入到各种其他系统中,而无需运行守护进程
- runC 建立在 libcontainer 之上,同样的容器技术为数百万个 Docker 引擎安装提供支持
1.2 RunC
RunC是一个由OCI(Open Container Initiative)制定的标准化轻量容器运行工具。OCI是专门致力于制定容器格式和运行时开放的工业化标准的组织。那容器标准化后Docker和RunC有什么关系和区别呢?OCI 定义了容器运行时标准,runC 是 Docker 按照开放容器格式标准(OCF, Open Container Format)制定的一种具体实现。runC 是从 Docker 的 libcontainer 中迁移而来的,实现了容器启停、资源隔离等功能。Docker 默认提供了 docker-runc 实现,事实上,通过 containerd 的封装,可以在 Docker Daemon 启动的时候指定 runc 的实现。简单的说Docker并不完全等同于容器,它更像是一个容器的管理工具。
1.3 OCI
OCI目前有2个标准:runtime-spec以及image-spec。前者规定了如何运行解压过的filesystem bundle。OCI规定了如何下载OCI镜像并解压到OCI filesystem bundle,这样OCI runtime就可以运行OCI bundle了。OCI(当前)相当于规定了容器的images和runtime的协议,只要实现了OCI的容器就可以实现其兼容性和可移植性。implements中列出了部分OCI标准的实现。
2. docker架构
docker使用的是C/S架构(服务端/客户端)Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 运行在同一系统上,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
2.1 docker守护进程
Docker 守护进程 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象,例如图像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。
2.2 docker客户端
Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如 之类的命令时docker run,客户端会将这些命令发送到dockerd,从而执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。
3. docker的镜像与镜像仓库
为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。
大家应该在码头或港口见过集装箱
- registry:就类似于码头的集装箱,集装箱里装的是同一种货物。(这个也就是我们所说的镜像)
- repository:就类似于存放集装箱的场地。(这个就是镜像仓库)
镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。
因为容器是通过镜像构建出来的,这就好比人的心脏,当心脏停止跳动,人自然也就生命活动了。
4. docker对象
当您使用 docker 时,您正在创建和使用图像、容器、网络、卷、插件和其他对象。
-
图片:
- 图像是一个只读模板,其中包含创建 docker 容器的说明。
- 通常,一个图像基于另一个图像,并带有一些额外的自定义。
- 您可以创建自己的映像,也可以仅使用其他人创建并在注册表中发布的映像。
-
容器:
- 容器是图像的可运行实例。
- 您可以使用 docker API 或 CLI 创建、运行、停止、移动或删除容器。
- 您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新映像。
5. docker的安装以及使用方法
5.1 若之前安装过旧版本请卸载重新安装
**环境说明:**系统版本为centos8
// 若没有安装过docker或新环境则可跳过此步骤
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
// 若报告没有可以到/var/lib/docker/目录下去找
5.2设置存储库
[root@localhost ~]# yum -y install yum-utils //这是为了提供yum-config-manager命令
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo // 提供docker官方的存储库
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //也可以添加阿里云的库
// 配置docker,因为docker默认使用的是国外的源要修改为国内的源
[root@localhost ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
5.3 安装docker以及依赖
[root@localhost ~]# yum -y install docker-ce docker-ce-cli containerd.io
// 可以通过使用下面的方法安装指定的版本
yum list docker-ce --showduplicates | sort -r //列出docker的版本
5.4 配置docker加速器
可以自己注册阿里云账号去自己的获取加速器
点击去之后就可以看到属于自己的镜像加速器了
docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。
docker的加速有多种方式:
- docker cn
- 中国科技大学加速器
- 阿里云加速器
因为docker属于国外的,当我们去拉取镜像的时候会很慢,所以我们就要配置加速器来提高访问速度
建议使用阿里云的加速器
// docker官方的加速器
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
// 阿里云的加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cgxhrn28.mirror.aliyuncs.com"]
}
EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
5.5 启动docker服务并设置开机自启
[root@localhost ~]# systemctl enable --now docker.service
5.6 测试运行docker容器,来验证是否安装成功
[root@localhost ~]# docker version
Client: Docker Engine - Community //容器引擎的社区版
Version: 20.10.11 //客户端的版本号
API version: 1.41 //这个是API的版本号
Go version: go1.16.9 //这个是GO语言的版本号
Git commit: dea9396 //docker这个版本提交的什么信息
Built: Thu Nov 18 00:36:58 2021 //此docker版本构建的时间
OS/Arch: linux/amd64 //系统平台
Context: default //这个为上下文
Experimental: true // 表示是否为测试版本
Server: Docker Engine - Community
Engine:
Version: 20.10.11 //服务端的版本号
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: 847da18
Built: Thu Nov 18 00:35:20 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12 //这个是容器版本
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2 //runC的版本号
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0 /docker的init的版本号
GitCommit: de40ad0
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest
Hello from Docker! //出现此行表示安装成功
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
6. docker命令、参数以及使用
[root@localhost ~]# docker info
Client:
Context: default // 客户端的上下文
Debug Mode: false //debug(测试)模式的状态
Plugins: //docker的插件
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.3-docker) //buildx镜像的工具包
scan: Docker Scan (Docker Inc., v0.9.0)
Server: //下面是容器的状态
Containers: 1 //容器的个数
Running: 0 //运行的容器个数
Paused: 0 // 暂停状态的容器
Stopped: 1 //停止状态的容器
Images: 1 // 镜像的个数
Server Version: 20.10.11 //这个是dockers服务端的版本
Storage Driver: overlay2 //储存的驱动版本
Backing Filesystem: xfs //后端的文件系统格式为xfs格式(centos7是使用的extfs)
Supports d_type: true
Native Overlay Diff: true
userxattr: false //是否支持用户的attr的设置
Logging Driver: json-file //日志记录的引擎是json文件的格式
Cgroup Driver: cgroupfs //cgroup的驱动
Cgroup Version: 1 //Cgroup的版本
Plugins: //插件
Volume: local //联合挂载的卷默认在本地
Network: bridge host ipvlan macvlan null overlay //支持的网络类型
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog //日志格式
Swarm: inactive //可以将多个主机逻辑上成一个主机
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc //运行时的类型
Default Runtime: runc //运行时所使用的类型
Init Binary: docker-init //初始化时的二进制使用的程序
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2 //版本号
init version: de40ad0 //版本号
Security Options: //安全选项
seccomp
Profile: default
Kernel Version: 4.18.0-257.el8.x86_64 //内核的版本号
Operating System: CentOS Stream 8 //系统版本
OSType: linux //系统类型
Architecture: x86_64 //架构类型
CPUs: 2 //CUP的核心数
Total Memory: 1.748GiB //内存大小
Name: localhost.localdomain //主机名
ID: SW5D:GFAD:BJBT:45EY:JMIL:JRFV:EZSW:KZCD:USZM:AGWA:NFQJ:YNRD
Docker Root Dir: /var/lib/docker //docker的工作目录
Debug Mode: false //debug模式的状态
Registry: https://index.docker.io/v1/ //仓库的位置
Labels: //标签
Experimental: false //是否是属于测试版本
Insecure Registries: //不安全的仓库
127.0.0.0/8
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/ //加速器的位置
Live Restore Enabled: false //docker的存活期的开启的功能时关闭状态
6.1 docker常用操作
命令 | 功能 |
---|---|
docker search | 在 Docker Hub 中搜索镜像 |
docker pull | 从注册表中拉取镜像或存储库 |
docker images | 列出镜像 |
docker create | 创建一个新的容器 |
docker start | 启动一个或多个停止的容器 |
docker run | 在新容器中运行命令 |
docker attach | 附加到正在运行的容器 |
docker ps | 列出容器 |
docker logs | 获取容器的日志 |
docker restart | 重启一个容器 |
docker stop | 停止一个或多个正在运行的容器 |
docker kill | 杀死一个或多个正在运行的容器 |
docker rm | 移除一个或多个容器 |
docker exec | 在正在运行的容器中运行命令 |
docker info | 显示系统范围的信息 |
docker inspect | 返回有关 Docker 对象的低级信息 |
6.1.1 docker search命令
可以通过访问官网的方式下载想要的镜像,前提时需要登录
docker官网
// 按受欢迎的程度来排序
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 15899 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2098 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 819 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 285
linuxserver/nginx An Nginx container, brought to you by LinuxS… 160
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 146 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 144 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 110 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 79 [OK]
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 60 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 57
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 54
nginxproxy/nginx-proxy Automated Nginx reverse proxy for docker con… 28
staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 25 [OK]
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 22
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 16
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
flashspys/nginx-static Super Lightweight Nginx Image 11 [OK]
mailu/nginx Mailu nginx frontend 9 [OK]
sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 3 [OK]
wodby/nginx Generic nginx 1 [OK]
arnau/nginx-gate Docker image with Nginx with Lua enabled on … 1 [OK]
centos/nginx-110-centos7 Platform for running nginx 1.10 or building … 0
6.1.2 docker pull命令
[root@localhost ~]# docker pull nginx:1.20.2 //从docker官网中拉取1.20.2版本的nginx镜像
1.20.2: Pulling from library/nginx
eff15d958d66: Pull complete
1f3e1e3ef6aa: Pull complete
231009cab23f: Pull complete
b2ef879f0046: Pull complete
5495a7eec709: Pull complete
ddde57a4eac9: Pull complete
Digest: sha256:6ce65dd1f3bf44fa60a0212f0f893b78a706f20f09c884b43de50037067d9f5d
Status: Downloaded newer image for nginx:1.20.2
docker.io/library/nginx:1.20.2 //从此处可以看出镜像的版本信息
[root@localhost ~]# docker pull nginx //若直接拉取镜像默认拉取最新版本的镜像
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
eff15d958d66: Already exists
1e5351450a59: Pull complete
2df63e6ce2be: Pull complete
9171c7ae368c: Pull complete
020f975acd28: Pull complete
266f639b35ad: Pull complete
Digest: sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest //最新版本的镜像
6.1.3 docker images命令
[root@localhost ~]# docker images //此命令可以看你所拥有的镜像数量
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.20.2 aedf7f31bdab 2 weeks ago 141MB
nginx latest ea335eea17ab 2 weeks ago 141MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
6.1.4 docker create命令
// 创建一个容器
[root@localhost ~]# docker create nginx //这个和拉取镜像一样,不指定版本号默认创建最新的
c6119340dcc32204c447c3340ee54ee705f34657e3a9d3aef4d1090064b5fa82
// 当本地没有镜像时docker就会自带去docker仓库去拉取最新版本来创建容器
[root@localhost ~]# docker create busybox //这个镜像本地没有
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
3aab638df1a9: Pull complete
Digest: sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1
Status: Downloaded newer image for busybox:latest
b1fe6541bb6031fc6c057cb726aabfe1f1da6b9fd1cdf9b278c3233c173a369c
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest d23834f29b38 33 hours ago 1.24MB
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1fe6541bb60 busybox "sh" 3 minutes ago Created modest_easley
[root@localhost ~]# docker start b1fe6541bb60 //启动此容器
b1fe6541bb60
[root@localhost ~]# docker ps //发现没有启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// 那是因为sh这个命令执行完之后,就没有任务需要执行所以就直接退出了
// 可以执行下面的命令让他保持运行状态,通俗的说就是给她一个任务让他执行,也就是让他有事做
[root@localhost ~]# docker create busybox sleep 500
b13bcfc22a02c710fa7c4e30f3d4a8293dedf25a619d6c2cab319c27b5934167
// 此时我们再次启动发现他处于运行状态
[root@localhost ~]# docker start b13bcfc22a02
b13bcfc22a02
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b13bcfc22a02 busybox "sleep 500" About a minute ago Up 4 seconds dreamy_turing
6.1.5 docker ps命令
[root@localhost ~]# docker ps //此命令只能查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a //加-a可以查看所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 3 minutes ago Created vigorous_mestorf
efa2e040f6d0 hello-world "/hello" 33 hours ago Exited (0) 33 hours ago gracious_ardinghelli
// 从左至右分别是容器的ID、镜像、容器执行的命令、创建容器的时间、容器的状态、容器运行的服务的端口号、容器名字
6.1.6 docker start命令
[root@localhost ~]# docker start c6119340dcc3 //start加id,建议最好使用id,不要使用名字,因为id是唯一的。
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 9 minutes ago Up 29 seconds 80/tcp vigorous_mestorf
6.1.7 docker stop命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 10 minutes ago Up About a minute 80/tcp vigorous_mestorf
[root@localhost ~]# docker stop c6119340dcc3 //停止运行容器
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6.1.8 docker restart命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker restart c6119340dcc3 //重启容器
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 11 minutes ago Up 5 seconds 80/tcp vigorous_mestorf
6.1.9 docker kill命令
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6119340dcc3 nginx "/docker-entrypoint.…" 14 minutes ago Up 2 minutes 80/tcp vigorous_mestorf
//这个kill命令和stop的功能一样,但是有一点不同的是kill是直接杀死进程类似于kill -9命令,属于暴力关闭,而stop类似于kill -15命令,属于"优雅"的关闭
[root@localhost ~]# docker kill c6119340dcc3
c6119340dcc3
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6.1.10 docker run
-i 就是交互模式,可以和容器进行交互
- t 指定tty 就是给容器一个类似于shell
[root@localhost ~]# docker run -it busybox /bin/sh //容器里面也可以执行命令行的命令
/ #
/ # ip a //查看容器的IP地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # exit //退出容器
// docker run -d 让容器后台运行并且打印容器id
[root@localhost ~]# docker run -d httpd //让httpd处于后台运行
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
eff15d958d66: Already exists
ba1caf8ba86c: Pull complete
ab86dc02235d: Pull complete
0d58b11d2867: Pull complete
e88da7cb925c: Pull complete
Digest: sha256:1d71eef54c08435c0be99877c408637f03112dc9f929fba3cccdd15896099b02
Status: Downloaded newer image for httpd:latest
2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e //此处为容器的id
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d110156953c httpd "httpd-foreground" 46 seconds ago Up 43 seconds 80/tcp relaxed_moore
6.1.11 docker inspect 命令
[root@localhost ~]# docker inspect 2d110156953c //inspect+容器的id,可以查看容器的详细信息
[
{
"Id": "2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e",
"Created": "2021-12-01T13:43:05.569236546Z",
"Path": "httpd-foreground",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3554,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-12-01T13:43:07.921679379Z",
"FinishedAt": "0001-01-01T00:00:00Z"
此处省略N行
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
[root@localhost ~]# curl 172.17.0.2 //通过容器的IP进行访问
<html><body><h1>It works!</h1></body></html>
6.1.12 docker logs
如果一个容器中运行了多个服务,那么这个功能将失效了。这也事因为一个容器只运行一个服务的原因
[root@localhost ~]# docker logs 2d110156953c //查看服务的日志
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Wed Dec 01 13:43:07.990665 2021] [mpm_event:notice] [pid 1:tid 139955215789376] AH00489: Apache/2.4.51 (Unix) configured -- resuming normal operations
[Wed Dec 01 13:43:07.991055 2021] [core:notice] [pid 1:tid 139955215789376] AH00094: Command line: 'httpd -D FOREGROUND'
172.17.0.1 - - [01/Dec/2021:13:49:46 +0000] "GET / HTTP/1.1" 200 45
172.17.0.1 - - [01/Dec/2021:13:53:57 +0000] "GET / HTTP/1.1" 200 45
6.1.13 docker attach命令
[root@localhost ~]# docker attach 2d110156953c //这个命令是进入容器,但是会占用前台,不能做任何操作,一般不建议使用此操作
6.1.14 docker exec命令
// 这个就是在容器的后台
[root@localhost ~]# docker exec -it 2d110156953c /bin/bash //-it前面说了,-i是和容器进行交互,-t是给容器一个ttr
root@2d110156953c:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
6.1.15 docker rm命令
// docker rm命令只能删除停止状态的容器,处于运行状态的容器删除不了。
docker rm -f命令可强制删除容器
// -a是列出所有的容器,-q是列出容器的id
[root@localhost ~]# docker rm $(docker ps -aq) //这种方法可以批量删除容器
c97fccd0eed8
071d7e163079
cf54d5708379
34d776168c94
b13bcfc22a02
b1fe6541bb60
c6119340dcc3
efa2e040f6d0
Error response from daemon: You cannot remove a running container 2d110156953c6e4b7f497edef0c57503563ee97d49d953bd9c18177aa2ca0f8e. Stop the container before attempting removal or force remove
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d110156953c httpd "httpd-foreground" 20 minutes ago Up 20 minutes 80/tcp relaxed_moore
一般情况下我们都只会删除容器而不会删除镜像这里我们试一下看删除镜像之后容器是否也会被删除
// 咱们先用nginx镜像创建一个容器
[root@localhost ~]# docker create nginx //默认使用最新的镜像创建容器
64fa6c081dfc42748413e558e18caf0c5b7fc123ca45dcc044429ef525d90c47
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64fa6c081dfc nginx "/docker-entrypoint.…" 16 seconds ago Created brave_raman
2d110156953c httpd "httpd-foreground" 2 hours ago Exited (0) 9 minutes ago relaxed_moore
[root@localhost ~]# docker start 64fa6c081dfc
64fa6c081dfc
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64fa6c081dfc nginx "/docker-entrypoint.…" 52 seconds ago Up 3 seconds 80/tcp brave_raman
[root@localhost ~]# docker stop 64fa6c081dfc //停止容器
64fa6c081dfc
[root@localhost ~]# docker images //删除最新的nginx镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest d23834f29b38 36 hours ago 1.24MB
httpd latest ad17c88403e2 12 days ago 143MB
nginx 1.20.2 aedf7f31bdab 2 weeks ago 141MB
nginx latest ea335eea17ab 2 weeks ago 141MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB
[root@localhost ~]# docker rmi -f ea335eea17ab //-f是强制删除
Untagged: nginx:latest
Untagged: nginx@sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e
Deleted: sha256:ea335eea17ab984571cd4a3bcf90a0413773b559c75ef4cda07d0ce952b00291
[root@localhost ~]# docker ps -a //我们发现容器没有被删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64fa6c081dfc ea335eea17ab "/docker-entrypoint.…" About a minute ago Exited (0) About a minute ago brave_raman
2d110156953c httpd "httpd-foreground" 2 hours ago Exited (0) 10 minutes ago relaxed_moore
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest d23834f29b38 36 hours ago 1.24MB
httpd latest ad17c88403e2 12 days ago 143MB
nginx 1.20.2 aedf7f31bdab 2 weeks ago 141MB
hello-world latest feb5d9fea6a5 2 months ago 13.3kB