docker学习笔记 1

桌桌 2022-8-16 218 8/16

学习视频来自:【狂神说Java】Docker最新超详细版教程

1 学习内容概要

Docker概述

Docker安装

Docker命令

· 镜像命令

· 容器命令

· 操作命令

Docker镜像

容器数据卷

DockerFile(微服务构建成镜像)

Docker网络原理(Docker是基于网络的)

IDEA整合Docker(将微服务整合到系统,到此时得到一个单机版docker)

Docker Compose(集群同时编排管理多个服务)

Docker Swarm(集群的管理)

CI/CD jenkins(持续集成和持续部署)

2 docker概述

docker出现的原因:

开发和上线的环境不同,应用环境应用配置,出现开发和运维的矛盾:我在我这儿可以运行,在别人那儿就不能运行,版本更新导致服务失效等。

开发和运维之间需要很强的沟通,于是开发即运维

环境配置问题:麻烦,每一台机器需要配置环境(radis,mysql集群,hadoop集群等)费时费力麻烦,还不能解决跨平台的问题

-->发布一个项目能不能带上环境安装打包

传统方式:开发给jar包,运维来做部署的事情

现在:开发打包部署上线,一套流程做成

docker提出了解决方案

java--apk--发布--某人使用--安装即可用。

java--jar(环境)--打包项目带上环境(镜像)--docker仓库:商店--下载我们发布的项目--直接运行即可。

JRE 可能有多个应用使用,可能会造成端口占用冲突,会报错,出现配置错误连接错误等,原来都是交叉共用的。

docker方案实现的核心思想是隔离,打包隔离,在logo中每个箱子是相互隔离的。同时放在系统中不会产生冲突。

docker可以使得服务器的使用效率利用到极致。

3 docker的历史

2010年 美国几个it年轻人成立了 dotCloud,做一些pass的云计算服务,LXC有关的容器技术,他们将自己的技术(容器化技术)命名为docker,将此技术开源下去(因为公司刚刚开始,docker刚刚诞生没有引起行业的主义,不开源公司就活不下去)。2013年docker开源,越来越多的人发现了docker的优点,变得十分火。

IaaS是Infrastructure as a server的缩写,意思是基础设施即服务。又云端公司把IT环境的基础设施建设好, 然后直接对外出租硬件服务器或者虚拟机。

PaaS是Platform as a Server的缩写,意思是平台即服务,即把运行用户所需的软件的平台作为服务出租。

SaaS是Software as a Server的缩写,意思是软件即服务。把软件租出去,用户连安装都不需要了。

DaaS是Date as a Server的缩写,意思是数据即服务。云端公司负责建立全部的IT环境,收集用户需要的基 础数据并且做数据分析,最后对分析结构或者算法提供编程接口,让数据成为服务。

火的原因?docker十分的轻巧!进行比较:

在容器技术出现之前使用的是虚拟机技术

虚拟机:在windows中安装Vmware,通过这个软件可以虚拟出来一台或者多台电脑!虚拟机十分的笨重,使用空间很大,很麻烦,做多个隔离的话就需要开启多个虚拟机,很笨重。得到的虚拟机之间是隔离的。

docker的隔离,用的是一种镜像机制,只是隔离的是最核心的环境而不是一个完整的虚拟机(最核心的环境4m+jdk+mysql)运行该镜像就可以了,十分的小巧。

虚拟机:几个G,开启分钟级

docker:几个M、KB,秒级启动

虚拟机是一种虚拟化技术,docker也是一种虚拟化技术。

docker是基于Go语言开发的开源项目

文档:Docker Documentation | Docker Documentationdocker文档特别详细

仓库地址:https://hub.docker.com/

4 docker 能做什么

虚拟机技术

docker学习笔记 1

虚拟化技术的缺点:

1、资源占用十分多

2、冗余步骤多

3、启动很慢

容器化技术

容器化技术不是模拟的一个完整的操作系统

docker学习笔记 1

比较Docker和虚拟化技术的不同

  • 传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们使用的硬件,所以相对就轻便了

  • 每个容器之间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响

DevOps(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:一键运行打包镜像,发布测试

更便捷的升级和扩缩容

使用了Docker之后,我们的部署应用就像搭积木一样,将各个部件进行堆积

项目打包为一个镜像,方便扩展 服务器A-->服务器B

一个服务器上可以运行多个容器,并且容器之间也可以交互

更简单的运维系统

在容器化之后,我们的开发和测试环境是高度一直

更高效的计算资源利用

一个服务器可以运行多个应用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例

服务器的性能可以被更高效的利用

5 Docker中的名词概念

docker的基本组成

docker学习笔记 1

左边可以理解为客户端,中间理解为服务器,右边理解为仓库

镜像(image):

docker镜像类似于一种模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务)

通过这个镜像可以创建多个容器(最终服务或者项目运行就是在容器中的)

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

启动、停止,删除等基本命令来操作

可以把这个容器的理解为一个简易的linux系统

仓库(repository):

仓库就是存放镜像的地方

分为公有仓库和私有的仓库

公有:

Docker Hub等(默认是国外的)

阿里云、华为云等都有容器服务(国内的话就要配置镜像加速,不然从国外特别慢)

6 docker安装

环境查看
# 系统内核是3.10以上
[root@iZuf63ifc44ezcc77ll054Z /]# uname -r
3.10.0-957.21.3.el7.x86_64
# 系统版本
[root@iZuf63ifc44ezcc77ll054Z /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
# 先卸载旧的docker
[root@VM-4-12-centos ~]# yum remove docker \
>                   docker-client \
>                   docker-client-latest \
>                   docker-common \
>                   docker-latest \
>                   docker-latest-logrotate \
>                   docker-logrotate \
>                   docker-selinux \
>                   docker-engine-selinux \
>                   docker-engine \
>                   docker-ce
Loaded plugins: fastestmirror, langpacks
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-selinux
No Match for argument: docker-engine-selinux
No Match for argument: docker-engine
No Match for argument: docker-ce
No Packages marked for removal

# 需要的安装包
yum install -y yum-untils

# 设置镜像的仓库为阿里云的镜仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
# 结果如下
[root@VM-4-12-centos ~]# yum-config-manager \
> --add-repo \
> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

# 更新yum软件包索引
yum makecache fast

# 安装docker相关的依赖 docker-ce 社区版 docker-ee 企业版
yum install docker-ce docker-ce-cli containerd.io

# 启动docker
systemctl start docker

# 使用docker version测试是否安装成功
docker version

结果如下图所示

docker学习笔记 1

# hello-world
docker run hello-world

docker学习笔记 1

# 查看一下下载的hello-world镜像是否存在
docker images

docker学习笔记 1

# 了解卸载
# 1 卸载依赖
yum remove docker-ce docker-ce-cli container.io
# 2 删除资源
rm -rf /var/lib/docker

# /var/lib/docker是docker的默认工作路径

7 配置镜像加速(这里使用的腾讯云)

腾讯云官方给出的镜像加速教程,以CentOS 7 为例

docker学习笔记 1

# 执行以下命令,打开 /etc/docker/daemon.json 配置文件。
vim /etc/docker/daemon.json
# 按 i 切换至编辑模式,添加以下内容,并保存。
{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}
# 执行以下命令,重启 Docker 即可。
sudo systemctl restart docker

8 Run的流程和Docker原理

docker run的流程

docker学习笔记 1

用之前hello-world的例子来理解

docker学习笔记 1

首先在本地寻找hello-world镜像,发现本地没有这个镜像,于是到Docker Hub上拉取(pull)镜像,发现有hello-world镜像供下载,于是下载到本地并运行,在界面打印出Hello from docker!

Docker的底层原理

docker是如何工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问

DockerServer接收到Docker-Client的指令,就会执行这个指令。

docker学习笔记 1

Docker为什么比VM快?

1、Docker有着比虚拟机更少的抽象层

2、Docker利用的是宿主机的内核,VM需要的是Guest OS

docker学习笔记 1

在新建一个容器的时候,docker不需要像虚拟机一项重新加载一个操作系统的内核,避免引导性的操作,虚拟机加载Guest OS,分钟级;而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。

docker学习笔记 1

docker具有很强的可迁移性。

9 镜像的常用命令

帮助命令

docker version  # 显示docker的版本信息
docker info     # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 help  # 万能帮助命令 

帮助文档的位置

Reference documentation | Docker Documentation

docker学习笔记 1

镜像命令

docker images 查看所有本地主机上的镜像
[root@VM-4-12-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   10 months ago   13.3kB

# 解释
REPOSITORY  镜像的仓库源
TAG         镜像的标签
IMAGE ID    镜像的id
CREATED     镜像的创建时间
SIZE        镜像大小

# 可选项
[root@VM-4-12-centos ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs
# 常用-a和-q,显示所有 只显示id
docker search 搜索镜像

在docker hub网页中可以搜索镜像Docker Hub Container Image Library | App Containerization

例如网页中搜索和查看mysql

docker学习笔记 1


[root@VM-4-12-centos ~]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   12976     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   4972      [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   594       [OK]       
percona                         Percona Server is a fork of the MySQL relati…   583       [OK]       
······


# 可选项,通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像的STAR大于3000的
[root@VM-4-12-centos ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12976     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4972      [OK]       
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@VM-4-12-centos ~]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

[root@VM-4-12-centos ~]# docker pull mysql
Using default tag: latest   #如果不写tag,默认就是latest
latest: Pulling from library/mysql
32c1bf40aba1: Pull complete     # 分层下载,docker image的核心 联合文件系统
3ac22f3a638d: Pull complete 
b1e7273ed05e: Pull complete 
20be45a0c6ab: Pull complete 
410a229693ff: Pull complete 
1ce71e3a9b88: Pull complete 
c93c823af05b: Pull complete 
c6752c4d09c7: Pull complete 
d7f2cfe3efcb: Pull complete 
916f32cb0394: Pull complete 
0d62a5f9a14f: Pull complete 
Digest: sha256:ce2ae3bd3e9f001435c4671cf073d1d5ae55d138b16927268474fc54ba09ed79 #签名,防伪标志
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #真是地址

#等价于
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@VM-4-12-centos ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
66fb34780033: Pull complete 
ef4ccd63cdb4: Pull complete 
d6f28a94c51f: Pull complete 
7feea2a503b5: Pull complete 
71dd5852ecd9: Pull complete 
2ff5c3b24fd5: Pull complete 
88a546386a61: Pull complete 
65b18297cf83: Pull complete 
d64f23335fb8: Pull complete 
6ba4171261fa: Pull complete 
96dcc6c8de93: Pull complete 
# 分层下载的好处:如果不同的镜像中具有相同的依赖,则不会重复下载,而是显示Already exist,极大的节省了内存,相同的部分就共用

指定版本下载需要在docker hub中存在,可以查询一下,例如mysql就有以下版本

docker学习笔记 1

docker rmi 删除镜像
# 删除指定的镜像
[root@VM-4-12-centos ~]# docker rmi -f 7b94cda7ffc7
Untagged: mysql:latest
Untagged: mysql@sha256:ce2ae3bd3e9f001435c4671cf073d1d5ae55d138b16927268474fc54ba09ed79
Deleted: sha256:7b94cda7ffc7c59b01668e63f48e0f4ee3d16b427cc0b846193b65db671e9fa2
Deleted: sha256:5941a477484b80a594761cb828f993b574a1ac2cd741300503209752f7790466
······

# 删除多个镜像
[root@VM-4-12-centos ~]# docker rmi -f 镜像id 镜像id 镜像id...


# 删除全部镜像
[root@VM-4-12-centos ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:5
Untagged: mysql:5.7
Untagged: mysql:5.7.39
Untagged: mysql@sha256:b3a86578a582617214477d91e47e850f9e18df0b5d1644fb2d96d91a340b8972
Deleted: sha256:3147495b3a5ce957dee2319099a8808c1418e0b0a2c82c9b2396c5fb4b688509
Deleted: sha256:326f57ec4510699d8f5e3286acab31c7fc5ff52030615178fc61a4e4e2666792
Deleted: sha256:d5d890fe2493dddb27d7a9afe6efc2deab86a3d0d14bb55d61130ea92552234d
Deleted: sha256:7fe3127c1b80dad856024ddbe4962beaadc360578de21cc24ff3f65898472ded
Deleted: sha256:dff3729e0a6b6be8c74937ee796802973b5b4164042d517174a57026b77c8c60
Deleted: sha256:f80a7c9d6763bc45d9f4a75b54304b9bb801d5c87d0848a22229f62a5b7a9dfc
Deleted: sha256:27e299d6421f0c88f5f5c82cac2f51884e28351240838cd835a133628a1b03bc
Deleted: sha256:9c23e82c5e50b4a1ba1978cb47a5028061609ddd0057c774bbf722e4b518a7c6
Deleted: sha256:23da32aa7c7218232a08036f50e8e60417f89d172a8381309e221680497e223f
Deleted: sha256:5a7d5cbcd5f100b4e3f3ce6f53766ca33c6464e86e29f6da96a070f9cd3deab2
Deleted: sha256:8a6b5d70d43734f669f9c99f8c0d92923520787eca7c91a7a161d0a7064d85c8
Deleted: sha256:9ba403017e5ec778c95a5c4673f9d9c36ddf94e30fcb47959142a9e89d6606ea
Untagged: hello-world:latest
Untagged: hello-world@sha256:53f1bbee2f52c39e41682ee1d388285290c5c8a76cc92b42687eecf38e0af3f0
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Error: No such image: 3147495b3a5c
Error: No such image: 3147495b3a5c
[root@VM-4-12-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
# 此时使用docker images查看发现没有镜像

10 容器的常用命令

说明:我们有了镜像之后才可以创建容器

下载一个centos镜像来测试学习

docker pull centos
新建容器并启动
docker run [可选参数] image

# 参数说明
--name="Name"   # 容器名字 tomcat01 tomcat02,用来区分容器
-d              # 后台方式运行
-it             # 使用交互方式运行,进入容器查看内容
-p              # 指定容器的端口 -p 8080:8080
    # -p ip:主机端口:容器端口
    # -p 主机端口:容器端口
    # -p 容器端口
    # 容器端口
-P              # 随机指定端口


# 测试,启动并进入容器
[root@VM-4-12-centos ~]# docker run -it centos /bin/bash
[root@bd3abbc72431 /]# ls       #查看容器内的centos,基础版本,很多命令都是不完善的
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中返回主机
[root@bd3abbc72431 /]# exit
exit
[root@VM-4-12-centos ~]# 

下载centos镜像并启动进入容器,截图如下所示:

docker学习笔记 1

列出所有运行的容器
# docker ps 命令
        # 列出当前正在运行的容器
-a      # 列出当前正在运行的容器+带出的历史运行过的容器
-n=?    # 显示最近创建的容器
-q      # 只显示容器的编号

[root@VM-4-12-centos ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-4-12-centos ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
bd3abbc72431   centos         "/bin/bash"   4 minutes ago   Exited (0) 2 minutes ago             elegant_gauss
fb945a540f37   feb5d9fea6a5   "/hello"      19 hours ago    Exited (0) 19 hours ago              determined_meitner
退出容器
exit        # 直接退出容器并退出
Ctrl+P+Q    # 容器不停止退出
删除容器
docker rm 容器id                  # 删除指定容器,不能删除正在运行的容器,如果强制删除 rm -rf
docker rm -f $(docker ps -aq)   # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器id       # 启动容器
docker restart 容器id     # 重启容器
docker stop 容器id        # 停止当前正在运行的容器
docker kill 容器id        # 强制停止当前容器

11 日志、元数据、进程的查看(常用的其他命令)

后台启动容器
# 命令 docker run -d 镜像名!
[root@VM-4-12-centos ~]# docker run -d centos
b799bf3a72696da0f14363756335986c6788d932c922354ed3f58de8398cc83b
[root@VM-4-12-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-4-12-centos ~]# 

# 问题:docker ps发现后台启动的centos停止了
# 原因:docker容器使用后台运行,必须要有一个前台进程,容器docker发现没有发现对外提供服务的应用,就会自动停止
# 例如nginx,容器启动后发现自己没有提供服务,就会立刻停止,表现为没有程序了
查看日志
# help中的解释
[root@VM-4-12-centos ~]# docker logs --help
Usage:  docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
...
  -f, --follow         Follow log output
  -t, --timestamps     Show timestamps
...

# 自己编写一段shell脚本,来使得日志中有东西可以看
docker run -d centos /bin/sh -c "while true;do echo zhuozhuo;sleep 1;done"

# 显示日志
docker logs -tf --tail number   # 显示指定条数的日志
-tf             # 
--tail number   # 要显示的日志条数
[root@VM-4-12-centos ~]# docker logs -tf --tail 10 ee19dd2372af
2022-08-08T07:07:54.315017861Z zhuozhuo
2022-08-08T07:07:55.317300463Z zhuozhuo
...
查看容器中的进程信息 ps
# 命令 docker top 容器id
[root@VM-4-12-centos ~]# docker top ee19dd2372af
UID                 PID                 PPID                C                   STIME               TTY                 TIME     
root                26051               26031               0                   15:06               ?                   00:00:00 
root                27902               26051               0                   15:13               ?                   00:00:00 
查看镜像的元数据
docker inspect 容器id

# 测试
[root@VM-4-12-centos ~]# docker inspect ee19dd2372af
[
    {
        "Id": "ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad",
        "Created": "2022-08-08T07:06:19.729228051Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo zhuozhuo;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 26051,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-08-08T07:06:20.101389472Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/hostname",
        "HostsPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/hosts",
        "LogPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad-json.log",
        "Name": "/modest_hypatia",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5-init/diff:/var/lib/docker/overlay2/930b392da73f51f16105376ead18cf58bd9e26045d8df408f1daf44ad8158671/diff",
                "MergedDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/merged",
                "UpperDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/diff",
                "WorkDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "ee19dd2372af",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true;do echo zhuozhuo;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "83d109738148cc82b1e2e5e510b2cb4db9f355f93adce27d88830369e8bad961",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/83d109738148",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "6419b259dd696adc2e1607a0f271ef3e41a3ac1b79a2fb36a6499bc9e330546a",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "3dee7204f23a636e6e890ec66c62cc8ace99fb5181b5b35c834290415c7414d5",
                    "EndpointID": "6419b259dd696adc2e1607a0f271ef3e41a3ac1b79a2fb36a6499bc9e330546a",
                    "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@VM-4-12-centos ~]# 

12 进入容器和拷贝的命令

进入容器

# 我们通常的容器都是使用后台方式运行的,需要进入容器修改一些配置

# 命令
docker exec -it 容器id bashShell

# 测试
[root@VM-4-12-centos ~]# docker exec -it ee19dd2372af /bin/bash
[root@ee19dd2372af /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 07:06 ?        00:00:00 /bin/sh -c while true;do echo zhuozhuo;sleep 1;done
root      1007     0  0 07:23 pts/0    00:00:00 /bin/bash
root      1029     1  0 07:23 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/
root      1030  1007  0 07:23 pts/0    00:00:00 ps -ef


# 命令二
docker attach 容器id
[root@VM-4-12-centos ~]# docker attach ee19dd2372af
zhuozhuo
zhuozhuo
zhuozhuo
zhuozhuo
#当前正在执行的代码...

# docker exec       # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach     # 进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目的主机路径


[root@178c87fe1ac0 /]# [root@VM-4-12-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
178c87fe1ac0   centos    "/bin/bash"   6 seconds ago   Up 6 seconds             recursing_chebyshev

# 查看当前主机目录文件
[root@VM-4-12-centos ~]# cd /home
[root@VM-4-12-centos home]# ls
lighthouse

[root@VM-4-12-centos home]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
178c87fe1ac0   centos    "/bin/bash"   6 minutes ago   Up 6 minutes             recursing_chebyshev

# 进入docker容器内部
[root@VM-4-12-centos home]# docker attach 178c87fe1ac0
[root@178c87fe1ac0 /]# cd /home
[root@178c87fe1ac0 home]# ls

# 在容器内新建一个文件
[root@178c87fe1ac0 home]# touch wyz.java
[root@178c87fe1ac0 home]# exit
exit

# 将docker中的文件拷贝出来到主机上
[root@VM-4-12-centos home]# docker cp 178c87fe1ac0:/home/wyz.java /home
[root@VM-4-12-centos home]# ls
lighthouse  wyz.java  

# 拷贝是一个手动过程,以后我们可以使用 -v 卷的技术来实现自动同步 /home -> /home

小结

docker学习笔记 1

- THE END -

桌桌

8月16日15:38

最后修改:2022年8月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 6 条评论

  1. adult dating

    If some one wishes expert view regarding blogging and site-building after that i propose him/her to visit this webpage, Keep up the pleasant job. Juan Stolt

  2. Loveme

    You are my breathing in, I possess few blogs and occasionally run out from to brand. Charlie Vancamp

  3. Loveme

    Fantastic site you have below, i do agree on some matters however, but not all. Elisha Strider

  4. hidden cam

    This article will help the internet visitors for creating new weblog or even a weblog from start to end. Loyd Dambach

  5. adult dating

    I truly appreciate this blog article. Really looking forward to read more. Much obliged. Boris Mongiovi

  6. bedava bitcoin

    Everything is very open with a very clear description of the challenges. Tracey Prawl