《OpenShift 4.x HOL教程汇总》

文章目录

  • 安装Docker客户端
  • 客户端配置文件
  • 登录/登出Container Registry
  • 登录身份凭证
  • 查询镜像
  • pull/push 镜像
  • 访问非安全的Registry
  • 保存镜像-恢复镜像
  • 运行容器,并观察对应进程和使用的存储
  • 查看容器日志
  • 查看容器运行实时状态
  • 运行停止的容器
  • 删除容器
  • Docker运行环境管理
    • 查看运行环境信息
    • 删除所有不用的容器、镜像

说明

  • 由于会使用本地的Container Registry,因此在开始本章前,建议先完成《容器入门(1) - 安装和使用Docker
    Registry》

安装Docker客户端

本文中的docker是RHEL或CentOS的YUM提供的定制版环境,所以在配置RedHat的Yum即可安装Docker客户端并启动对应的服务。

$ cat > /etc/yum.repos.d/docker.repo << EOF
[extras]
name=CentOS 7 - Extras
baseurl=http://mirrors.163.com/centos/7/extras/x86_64
gpgcheck=0EOF$ yum -y install docker
$ systemctl start docker

客户端配置文件

Docker的配置文件包括如下几个:

  1. “/etc/sysconfig/docker”:定义了docker服务启动参数,证书目录(“/etc/docker”)。
  2. “/etc/containers/registries.conf":专门定义docker可以访问的Container Registry,包括“[registries.search]”、“[registries.insecure]”、“[registries.block]”、“[registry.mirror]”。这几个参数不可以同时在“/etc/containers/registries.conf"和"/etc/docker/daemon.json"中定义。
  3. “/etc/docker/daemon.json:定义所有Docker Daeman启动的参数。也可包括“[registries.search]”、“[registries.insecure]”、“[registries.block]”、“[registry.mirror]”这些参数,但是它们不能同时在“/etc/containers/registries.conf"和”/etc/docker/daemon.json"中定义。

我们可以通过执行“docker info”查看这些配置是否生效。

$ docker info
Containers: 0Running: 0Paused: 0Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins:Volume: localNetwork: bridge host macvlan null overlayAuthorization: rhel-push-plugin
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: e45dd70447fb72ee4e1f6989173aa6c5dd492d87 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:seccompWARNING: You're not using the default seccomp profileProfile: /etc/docker/seccomp.jsonselinux
Kernel Version: 3.10.0-1062.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.7 (Maipo)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 1.952 GiB
Name: registry
ID: 2I2R:E54T:LXTT:WJHA:QUSB:QBWL:U6OQ:VW7S:ORIU:WFHF:ND25:H2XK
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Experimental: false
Insecure Registries:insecure-registry.example.com127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure), registry.fedoraproject.org (secure), quay.io (secure), registry.access.redhat.com (secure), registry.centos.org (secure), docker.io (secure)

从以上看到“Docker Root Dir: /var/lib/docker”,所以可以执行命令设置:

$ DOCKER_DATA_DIR=/var/lib/docker

登录/登出Container Registry

  1. 用docker登录Container Registry,docker会自动将登录认证的凭证写到“~/.docker/config.json”文件(较早版本的docker写入的是~/.dockercfg文件。目前docker兼容旧版文件,因此会先找config.json文件,如果找不到会再找dockercfg文件)中。
$ docker login ${REGISTRY_DOMAIN}:5000 -u user1 -p password1
Login Succeeded
$ cat ~/.docker/config.json
{"auths": {"registry.domain.com:5000": {"auth": "dXNlcjE6cGFzc3dvcmQx"}}
}
  1. 在docker登录后再执行其他Registry有关操作,docker会是使用config.json进行认证身份。
  2. 执行命令登出Container Registry,可以发现此时缺省认证文件auth.json中已经没有认证信息了。
$ docker logout ${REGISTRY_DOMAIN}:5000
$ cat ~/.docker/config.json
{"auths": {}
}

登录身份凭证

查询镜像

  1. docker默认是搜索“[registries.search]”中配置的registry。
  2. 查询“docker.io/busybox”镜像,只返回3个结果。
$ docker search docker.io/busybox --limit 3
INDEX       NAME                              DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/busybox         Busybox base image.                               1931    [OK]
docker.io   docker.io/radial/busyboxplus      Full-chain, Internet enabled, busybox made f...   31                 [OK]
docker.io   docker.io/yauritux/busybox-curl   Busybox with CURL                                 8
  1. 查本地Registry上的busybox镜像。
$ docker search ${REGISTRY_DOMAIN}:5000/busybox --limit 3
INDEX             NAME                               DESCRIPTION   STARS   OFFICIAL   AUTOMATED
domain.com:5000   registry.domain.com:5000/busybox                 0

pull/push 镜像

  1. 将busybox镜像从docker.io拉到本地缓存。注意“Storing signatures”后面的字符创。
$ docker pull busybox
Using default tag: latest
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
91f30d776fb2: Pull complete
Digest: sha256:9ddee63a712cea977267342e8750ecbc60d3aab25f04ceacfa795e6fce341793
Status: Downloaded newer image for docker.io/busybox:latest
  1. 查看本地镜像缓存。注意“IMAGE ID”的内容是上面““Storing signatures”的一部分。
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              c7c37e472d31        6 days ago          1.22 MB
  1. 查看这个Image的详细配置,其中GraphDriver部分为该Image在本地存储的位置。
$ docker image inspect docker.io/busybox
。。。"GraphDriver": {"Name": "overlay2","Data": {"MergedDir": "/var/lib/docker/overlay2/dc19da25fc03060784f3208045fda1ac0a7008f1f4eab3988f6a5585f7f5f79e/merged","UpperDir": "/var/lib/docker/overlay2/dc19da25fc03060784f3208045fda1ac0a7008f1f4eab3988f6a5585f7f5f79e/diff","WorkDir": "/var/lib/docker/overlay2/dc19da25fc03060784f3208045fda1ac0a7008f1f4eab3988f6a5585f7f5f79e/work"}},
。。。
  1. 查看存储镜像目录:${DOCKER_DATA_DIR}/overlay2/dc19da25fc03060784f3208045fda1ac0a7008f1f4eab3988f6a5585f7f5f79e/diff”。
$ ll ${DOCKER_DATA_DIR}/overlay2/dc19da25fc03060784f3208045fda1ac0a7008f1f4eab3988f6a5585f7f5f79e/diff
total 16
drwxr-xr-x. 2 root  root  12288 Jun 26 20:21 bin
drwxr-xr-x. 2 root  root      6 Jun 26 20:21 dev
drwxr-xr-x. 3 root  root     79 Jun 26 20:21 etc
drwxr-xr-x. 2 65534 65534     6 Jun 26 20:21 home
drwx------. 2 root  root      6 Jun 26 20:21 root
drwxrwxrwt. 2 root  root      6 Jun 26 20:21 tmp
drwxr-xr-x. 3 root  root     18 Jun 26 20:21 usr
drwxr-xr-x. 4 root  root     30 Jun 26 20:21 var

访问非安全的Registry

当docker访问Registry的时候进行build、commit、pull或push操作的时候,如果所访问的Registry在“[registries.insecure]”中,那么docker缺省用“–tls-verify=false”发起请求。如果访问其它Registry(没有在registries.conf中定义或在registries.conf中定义为“[registries.search]”),docker缺省用“–tls-verify=true”发起请求。如果需要不使用上述缺省访问,可以在命令中会用“–tls-verify”。

保存镜像-恢复镜像

  1. 执行命令,确认本地有busybox镜像。
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              c7c37e472d31        6 days ago          1.22 MB
  1. 执行命令,将本地docker.io/library/busybox:latest镜像保存到文件中。
$ docker image save docker.io/busybox:latest -o busybox.tar$ ll busybox.tar
-rw-------. 1 root root 1451008 Jul  6 10:11 busybox.tar
  1. 将本地docker.io/library/busybox:latest镜像删除。
$ docker rmi docker.io/library/busybox:latest
Untagged: docker.io/busybox:latest
Untagged: docker.io/busybox@sha256:9ddee63a712cea977267342e8750ecbc60d3aab25f04ceacfa795e6fce341793
Deleted: sha256:c7c37e472d31c1685b48f7004fd6a64361c95965587a951692c5f298c6685998
Deleted: sha256:50761fe126b6e4d90fa0b7a6e195f6030fe250c016c2fc860ac40f2e8d2f2615$ docker images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
  1. 从busybox.tar文件加载busybox镜像,然后确认镜像已经加载成功。
$ docker image load -i busybox.tar
50761fe126b6: Loading layer [==================================================>] 1.442 MB/1.442 MB$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              c7c37e472d31        6 days ago          1.22 MB

运行容器,并观察对应进程和使用的存储

  1. 在Terminal 1中运行busybox容器,然后在其中创建1个目录和hello.txt,然后查看容器内的主机名。注意不要退出。
$ docker run --name busybox-local -it ${REGISTRY_DOMAIN}:5000/busybox
/ # mkdir mydir1
/ # echo hello > mydir1/hello.txt
/ # hostname
bd568e08527a
  1. 在Terminal 2中运命令,查看运行的容器。其中“CONTAINER ID”为“bd568e08527a”,和容器内的主机名相同。
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
bd568e08527a        docker.io/busybox   "sh"                2 minutes ago       Up 2 minutes                            busybox-local$ CONTAINER_ID=$(docker inspect --format="{{.Id}}" busybox-local)
  1. 在Terminal 2中运命令,根据“CONTAINER ID”查看宿主机的系统进程。
$ ps -ef | grep ${CONTAINER_ID}
root      7798  4621  0 10:36 ?        00:00:00 /usr/bin/docker-containerd-shim-current bd568e08527a95336d05aa601bc85937cc068cbc8b8e172b8da298c0c42f1510 /var/run/docker/libcontainerd/bd568e08527a95336d05aa601bc85937cc068cbc8b8e172b8da298c0c42f1510 /usr/libexec/docker/docker-runc-currentll ${DOCKER_DATA_DIR}/containers/${CONTAINER_ID}/
total 24
drwx------. 2 root root    6 Jul  6 10:36 checkpoints
-rw-r--r--. 1 root root 2497 Jul  6 10:36 config.v2.json
-rw-r--r--. 1 root root 1123 Jul  6 10:36 hostconfig.json
-rw-r--r--. 1 root root   13 Jul  6 10:36 hostname
-rw-r--r--. 1 root root  174 Jul  6 10:36 hosts
-rw-r--r--. 1 root root   53 Jul  6 10:36 resolv.conf
-rw-r--r--. 1 root root   71 Jul  6 10:36 resolv.conf.hash
drwxr-xr-x. 3 root root   37 Jul  6 10:36 secrets
drwxrwxrwt. 2 root root   40 Jul  6 10:36 shm$ more ${DOCKER_DATA_DIR}/containers/${CONTAINER_ID}/hostname
bd568e08527a$ more ${DOCKER_DATA_DIR}/containers/${CONTAINER_ID}/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      bd568e08527a
192.168.1.6     registry.domain.com
  1. 执行命令,查看分配给这个容器的可写目录。
$ docker inspect busybox-local
。。。
"GraphDriver": {"Name": "overlay2","Data": {"LowerDir": "/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e-init/diff:/var/lib/docker/overlay2/66503a4e15ca0d58f694d56764662b97237cc8d11686feb3a5aa0df5b482f015/diff","MergedDir": "/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/merged","UpperDir": "/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/diff","WorkDir": "/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/work"}},
。。。
  1. 在Terminal 2中运命令,查找名为“hello.txt”的文件。确认可以查到2个名为“hello.txt”的文件,一个是在“xxxxxxxxxxxxxxxxxx/diff/mydir1”目录中,另一个在“xxxxxxxxxxxxxxxxxx/merged/mydir1”中。
$ find / -name hello.txt
/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/diff/mydir1/hello.txt
/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/merged/mydir1/hello.txt
  1. 在Terminal 1中运命令,从“busybox”容器中退出。
/ # exit
  1. 再次在Terminal 2中运命令,查找名为“hello.txt”的文件。确认只能在“xxxxxxxxxxxxxxxxxx/diff/mydir1”目录中查到1个名为“hello.txt”的文件了。
$ find / -name hello.txt
/var/lib/docker/overlay2/71eb1e5b9b82eeca5261ad74b713ee9d6f7ad86e4c88314a0d940c8a651fdd5e/diff/mydir1/hello.txt
  1. 执行命令,查看busybox-local容器的文件系统变化情况。
$ docker diff busybox-local
D /mydir1
A /mydir1/hello.txt
C /root
A /root/.ash_history
D /run
A /run/secrets

查看容器日志

  1. 在Terminal 1中执行命令,查看所有运行的容器,其中有刚刚运行并退出的“busybox-local”容器。此时该容器的环境还在,只不过没有运行。
$ docker ps -a
CONTAINER ID  IMAGE                                    COMMAND  CREATED         STATUS                      PORTS  NAMES
bd568e08527a  registry.domain.com:5000/busybox:latest  sh       48 seconds ago  Exited (0) 30 seconds ago          busybox-local
  1. 执行命令,查看名为 busybox-local的容器日志。
$ docker logs busybox-local
/ # mkdir mydir1
/ # echo hello > mydir1/hello.txt
/ # hostname
bd568e08527a
/ # exit

查看容器运行实时状态

  1. 在Terminal 1中运行命令,继续运行busybox-local容器。
$ docker start -ia busybox-local
  1. 执行命令,查看容器运行运行的实施消耗资源情况。
$ docker stats --all
CONTAINER           CPU %               MEM USAGE / LIMIT    MEM %               NET I/O
bd568e08527a        0.00%               64 KiB / 1.952 GiB   0.00%               656 B / 656 B       0 B / 0 B           1

运行停止的容器

  1. 在Terminal 1中执行命令,查看所有运行的容器,其中有刚刚运行并退出的“busybox-local”容器。此时该容器的环境还在,只不过没有运行。
$ docker ps -a
CONTAINER ID  IMAGE                                    COMMAND  CREATED         STATUS                      PORTS  NAMES
84625108be74  registry.domain.com:5000/busybox:latest  sh       48 seconds ago  Exited (0) 30 seconds ago          busybox-local
  1. 在Terminal 1中再次执行以下命令,将报错,提示已经名为“busybox-local”的容器已经在本地存储中了。
$ docker run --name busybox-local -ai ${REGISTRY_DOMAIN}:5000/busybox
Error: error creating container storage: the container name "busybox-local" is already in use by "84625108be74a36b64e24edec59483c5340d0f768d7355a3c64ec7660dd80686". You have to remove that container to be able to reuse that name.: that name is already in use
  1. 在Terminal 1中执行命令,根据在本地已有的“busybox-local”容器重新运行。在进入“busybox-local”容器内部后再次退出。
$ docker start -ai busybox-local
/ # exit

删除容器

  1. 在Terminal 1中执行命令,查看所有运行的容器,其中有刚刚运行并退出的“busybox-local”容器。此时该容器的环境还在,只不过没有运行。
$ docker ps -a
CONTAINER ID  IMAGE                                    COMMAND  CREATED            STATUS                       PORTS  NAMES
84625108be74  registry.domain.com:5000/busybox:latest  sh       44 minutes ago     Exited (0) 7 minutes ago            busybox-local
  1. 在Terminal 1中执行命令,删除busybox-local容器。
$ docker rm busybox-local
busybox-local
  1. 或者在Terminal 1中执行以下命令,将所有不运行的容器全部删除,
$ docker container prune
Are you sure you want to continue? [y/N] y
Deleted Containers:
f985ccb5f38d5047fab13a603a6c8018eb8d43d6c16ea71f70b9cea25598f738Total reclaimed space: 5 B
  1. 在Terminal 1中执行命令,已经找不到“hello.txt”了。
$ find / -name hello.txt

Docker运行环境管理

查看运行环境信息

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   0                   1.224 MB            1.224 MB (100%)
Containers          0                   0                   0 B                 0 B
Local Volumes       0                   0                   0 B                 0 B

删除所有不用的容器、镜像

$ docker system prune --all

容器入门(3) - docker相关推荐

  1. 自动化集成:Docker容器入门简介

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Docker基础用法. 一.Docker简介 1.基础 ...

  2. 容器入门(6) - 获取访问Docker Registry的公钥证书

    <OpenShift 4.x HOL教程汇总> 获取问Docker Registry的证书 在根据<容器入门(1) - 安装和使用Docker Registry>,我们可以使用 ...

  3. Docker容器入门及网易最佳实践

    文章目录 第一节 Docker容器入门 1.1.1 基础概念 1. Docker是什么 2. Docker和传统虚拟机的对比 3. 为什么要使用Docker 4. Docker架构 5. Docker ...

  4. Docker容器入门-基本命令的使用

    目前容器技术使用相当广泛 不会或者没有使用过容器感觉都不像是个搞技术的 所以,我也就docker相关内容做一个整理 只有不断的学习,才能保持自己的竞争力 什么是容器? 容器是一种轻量级.可移植.自包含 ...

  5. Docker入门 - 005 Docker 容器连接

    Docker 容器连接 前面我们实现了通过网络端口来访问运行在docker容器内的服务.下面我们来实现通过端口连接到一个docker容器 网络端口映射 我们创建了一个 python 应用的容器. do ...

  6. 容器入门(1) - 安装和使用Docker Registry

    <OpenShift 4.x HOL教程汇总> 文章目录 部署拓扑 准备宿主机 创建SSL证书和用户认证文件 安装Docker环境 打开防火墙 安装Docker Registry 基于容器 ...

  7. 容器化技术Docker由入门到实战

    目录 对docker的理解 能做什么 传统虚拟机 容器虚拟化技术 Docker 和传统虚拟化方式的不同之处 Docker的安装 前置环境 Vagrant虚拟机环境 ​编辑使用Vgrant安装虚拟机 虚 ...

  8. Docker 容器入门

    1.1 容器简介 1.1.1 什么是 Linux 容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件.容器提供的镜像包含了应用的所有依赖项, ...

  9. 容器安全 - 限制docker/podman只能使用有效签名的镜像

    <OpenShift 4.x HOL教程汇总> 文章目录 注册quay.io用户 限制只能使用有效签名的镜像 其他 说明:本文使用RHEL或CentOS自带的podman作为容器运行环境, ...

最新文章

  1. 工业用微型计算机笔记(5)-指令系统(2)
  2. firefox+android+平板,Firefox OS首款平板现身,“三头并进”追赶Android
  3. 正则表达式格式化日期
  4. Zookeeper: Zookeeper架构及FastLeaderElection机制
  5. 关于 vim 的 magic 设置
  6. 【CF#801 A.】 Vicious Keyboard(字符串查找,水题)
  7. 微服务应用实现无损上下线实践
  8. 线程中可以创建进程吗_Linux 进程线程是如何创建的?
  9. 易语言 取自定义数据类型的大小
  10. 垂直搜索引擎模块设计
  11. awr报告与statspack报告
  12. 老外写的比较好用的splitter控件
  13. 笛科思软件培训方案txwtech software training plan
  14. XJOI一级六段题解(g++,即C++),也可视作C++算法竞赛教程
  15. 笔记:修改host文件
  16. 硬件工程师成长之路(1)——元件基础
  17. 愿岁月流成花海,你我结伴而行
  18. MySQL中对比两张表是否有不同数据
  19. mysql一次count多个字段_SQL一次查出多个字段的COUNT值
  20. ios浏览器打开app页面提示“浏览器打不开该网页,因为网址无效”

热门文章

  1. 计算机专业开题报告指导老师意见评语,开题报告指导教师评语
  2. python怎么安装xlrd库_Python第三方库xlrd/xlwt的安装与读写Excel表格
  3. lua 获取网络时间_Lua脚本引擎教程:学习路线
  4. 计算机导论 网络,计算机导论(网络).ppt
  5. APP设计灵感|高颜值时钟页面!让每一秒都过得有意义
  6. UI干货素材分享|导航设计
  7. UI网页头部设计模板素材|这么多讲究,你知道吗?
  8. oracle jvm禁用,java-如何减少Sun / Oracle JVM内部开销?
  9. python读取数据库中指定内容_python如何用正则表达式读取对应字段写入数据库中?...
  10. Linux hypervisor VMM介绍