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 引擎安装提供支持

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,它允许您使用由一组容器组成的应用程序。
docker架构图

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

7. docker的事件状态

状态图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值