容器技术
容器技术
1.1 概念
1.1.1 什么是云原生
云原生是一种构建和运行云端应用程序的方法论,它将应用程序设计和开发与云计算的特性和优势相结合。用通俗易懂的语言来解释,可以用以下例子来说明云原生的概念:
假设你要开一家面包店。在传统的方式下,你需要自己从头开始建造一个面包店,购买烤箱、面粉、糖等原材料,并且雇佣烘焙师傅和服务员来生产面包和销售产品。这个过程需要自己投入大量的时间和精力。
而云原生的方式就可以将你的面包店基于云计算的虚拟化环境来建立。你不需要购买实体设备,只需租用云服务提供商的虚拟机、存储和网络资源。你可以将面包店的应用程序作为一个云原生应用来设计和开发,利用云计算的优势,比如弹性伸缩、高可用性和灵活性。你可以根据需求动态调整资源使用,不再需要关心硬件设备的细节,并且可以迅速部署和管理应用程序。
此外,云原生还提倡使用容器技术(如Docker) 来打包和分发应用程序,使得应用程序的运行环境更加独立和可移植。同时,云原生还倡导采用微服务架构,将应用程序分解成一系列小型、独立的服务组件,每个组件负责一个特定的功能。这样可以实现模块化开发,方便应对复杂的业务需求和快速迭代。
综上所述,云原生是一种以云计算为基础,利用虚拟化、容器化和微服务架构的方式,更高效、更灵活地构建和运行应用程序(上层应用)。它可以让你专注于应用开发和业务创新,而不需要关注底层基础设施的细节。
1.1.2 什么是容器
容器技术是一种轻量级的虚拟化技术,它允许将应用程序和其依赖项打包到一个独立的、可移植的运行环境中,称为容器。这些容器可以在任何支持容器化技术的主机上运行,而不受底层操作系统和硬件的影响。
传统的虚拟化技术通常涉及在物理服务器上运行多个虚拟机,每个虚拟机都包含一个完整的操作系统和应用程序栈。这样的虚拟机运行起来更为重量级,占用更多的系统资源。相比之下,容器技术专注于应用程序和所需的运行时依赖项,而不需要额外的操作系统实例。
容器化应用程序在容器内部运行,并与底层的操作系统内核共享资源。容器可以拥有自己的文件系统、进程空间和网络接口,但它们与宿主机共享操作系统的内核。这种共享资源的方式让容器变得更加轻量级、快速启动和高效运行。
容器技术提供了许多优势,包括:
- 简化部署:容器提供了一个一致的运行环境,可以轻松地在不同的主机或云平台上部署应用程序。
- 快速启动:容器可以在几秒钟内启动,相比之下,传统的虚拟机需要更长的启动时间。
- 可移植性:容器可以在不同的环境中移植和运行,无需重写代码或重新配置应用程序。
- 资源隔离:容器提供了资源隔离,使得不同的容器可以在同一台主机上运行,而互不干扰。
- 弹性伸缩:容器技术可以根据需求自动扩展或收缩容器实例,以适应负载的变化。
一些流行的容器化技术包括Docker 和 Kubernetes(K8s),Podman、Buildah。Docker 提供了一种简单的方法来创建、打包和分享容器镜像,而Kubernetes 是一个容器编排平台,用于自动化和管理大规模的容器部署。这些技术的出现,使得容器化应用程序的开发、部署和管理变得更加简单和高效。
K3s怎么来的呢?认为k8s太过重量级。在某些场景下不需要用到k8s这么强大的功能,边缘计算等等场景,它们就想砍掉一半,原10个字母就剩了5个字母,带上ks,中间就是3个字母。
1.2 容器和虚拟化的区别

资源利用率:虚拟化技术通过在物理服务器上创建多个虚拟机实例,每个实例都有自己的操作系统和应用程序栈。这导致了较高的资源消耗,因为每个虚拟机都需要独立的操作系统和相关基础设施。相比之下,容器技术非常轻量级,容器共享主机的操作系统内核和基础设施,因此具有更高的资源利用率。
启动速度:由于容器共享操作系统内核和基础设施,容器的启动时间通常比虚拟机更快。容器可以在几秒钟之内启动,而虚拟机可能需要几分钟才能启动。
隔离性:虚拟化技术提供了更强的隔离性,每个虚拟机都有自己独立的操作系统和内核,因此虚拟机之间的资源和环境相对独立。容器技术提供了一定程度的隔离,但容器之间共享操作系统内核和资源,因此容器之间的隔离性较虚拟机较弱。
灵活性和可移植性:容器技术非常灵活和可移植,容器可以在不同的环境中移植和运行,无需进行重写或重新配置。虚拟化技术在不同平台之间的迁移相对较复杂,需要进行更多的配置和调整。
管理和部署:容器技术提供了一套工具和平台(如Docker 和 Kubernetes),使得容器的管理和部署更加简单、自动化和可扩展。传统的虚拟化技术需要使用虚拟化管理器来管理和监控虚拟机。
总体而言,虚拟化技术更适用于创建完全隔离的、具有独立操作系统的虚拟环境。容器技术则更适合运行轻量级、可移植、可扩展和高密度的应用程序,享受较高的资源利用率和启动效率。


1.3 安装Docker
Docker 分为两个版本:
- EE(企业版):需要付费。
- CE(开源社区版):免费使用。
1.3.1 安装基础软件
[root@zengxi ~]# mount /dev/sr0 /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@zengxi ~]# cd /etc/yum.repos.d/
[root@zengxi yum.repos.d]# mkdir bak
[root@zengxi yum.repos.d]# mv CentOS-Stream-* bak/
[root@zengxi yum.repos.d]# ls
bak
[root@zengxi yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all && yum makecache
[root@docker yum.repos.d]# yum -y install vim net-tools bash-completion yum-utils下载docker-ce repo文件
阿里巴巴开源镜像站:https://developer.aliyun.com/mirror/

获取在线Docker-CE.repo
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

[root@Hlanan yum.repos.d]# ll
total 12
drwxr-xr-x. 2 root root 4096 Oct 8 11:31 bak
-rw-r--r--. 1 root root 2495 Aug 4 2022 CentOS-Base.repo
-rw-r--r--. 1 root root 2081 Oct 8 15:04 docker-ce.repo
[root@Hlanan yum.repos.d]#
查看下docker-ce.repo仓库中有哪些docker版本可供选择安装
[root@Hlanan yum.repos.d]# yum list docker-ce --showduplicate |sort -r
Last metadata expiration check: 0:11:49 ago on Tue 08 Oct 2024 03:05:24 PM CST.
docker-ce.x86_64 3:26.1.3-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.1.2-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.1.1-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.1.0-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.0.2-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.0.1-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.0.0-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.5-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.4-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.3-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.2-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.1-1.el8 docker-ce-stable
docker-ce.x86_64 3:25.0.0-1.el8 docker-ce-stable安装docker-ce:yum -y install docker-ce
如果如下报错,则
[root@Hlanan ~]# yum -y install docker-ce
Last metadata expiration check: 0:13:40 ago on Tue 08 Oct 2024 03:05:24 PM CST.
Error:
Problem: package docker-ce-3:26.1.3-1.el8.x86_64 requires containerd.io >= 1.6.24, but none of the providers can be installed
- package containerd.io-1.6.24-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.24-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.25-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.25-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.26-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.26-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.27-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.27-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.28-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.28-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.28-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.28-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.31-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.31-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.32-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- package containerd.io-1.6.32-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
- problem with installed package buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64
- package buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
- package buildah-1.22.3-2.module_el8.5.0+911+f19012f9.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
- package containerd.io-1.6.24-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.24-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.25-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.25-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.26-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.26-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.27-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.27-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.28-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.28-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.28-3.2.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.28-3.2.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.31-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.31-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.32-3.1.el8.x86_64 conflicts with runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- package containerd.io-1.6.32-3.1.el8.x86_64 obsoletes runc provided by runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
- cannot install the best candidate for the job
- package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
- package runc-1.0.0-66.rc10.module_el8.5.0+1004+c00a74f5.x86_64 is filtered out by modular filtering
- package runc-1.0.0-72.rc92.module_el8.5.0+1006+8d0e68a2.x86_64 is filtered out by modular filtering
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
由于podman 和buildah与docker有冲突,所有需要先卸载podman buildah,在安装docker
yum -y erase podman buildah
[root@Hlanan ~]# yum -y erase podman buildah
Dependencies resolved.
================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================
Removing:
buildah x86_64 1:1.28.2-2.module_el8.8.0+1254+78119b6e @AppStream 26 M
podman x86_64 3:4.3.1-2.module_el8.8.0+1254+78119b6e @AppStream 42 M
Removing dependent packages:
cockpit-podman noarch 59-1.module_el8.8.0+1254+78119b6e @AppStream 579 k
Removing unused dependencies:
conmon x86_64 3:2.1.5-1.module_el8.8.0+1254+78119b6e @AppStream 172 k
container-selinux noarch 2:2.195.1-1.module_el8.8.0+1254+78119b6e @AppStream 62 k
containers-common x86_64 2:1-49.module_el8.8.0+1254+78119b6e @AppStream 411 k
criu x86_64 3.15-3.module_el8.7.0+1216+b022c01d @AppStream 1.4 M
fuse-overlayfs x86_64 1.10-1.module_el8.8.0+1254+78119b6e @AppStream 145 k
fuse3 x86_64 3.3.0-16.el8 @anaconda 100 k
fuse3-libs x86_64 3.3.0-16.el8 @anaconda 274 k
libnet x86_64 1.1.6-15.el8 @AppStream 170 k
libslirp x86_64 4.4.0-1.module_el8.7.0+1216+b022c01d @AppStream 134 k
podman-catatonit x86_64 3:4.3.1-2.module_el8.8.0+1254+78119b6e @AppStream 761 k
runc x86_64 1:1.1.4-1.module_el8.7.0+1216+b022c01d @AppStream 9.5 M
shadow-utils-subid x86_64 2:4.6-17.el8 @anaconda 205 k
slirp4netns x86_64 1.2.0-2.module_el8.7.0+1216+b022c01d @AppStream 103 k
Transaction Summary
================================================================================================================================================================
Remove 16 Packages
Freed space: 82 M
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64 1/1
Erasing : buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64 1/16
Erasing : cockpit-podman-59-1.module_el8.8.0+1254+78119b6e.noarch 2/16
Running scriptlet: podman-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 3/16
Erasing : podman-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 3/16
Running scriptlet: podman-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 3/16
Erasing : containers-common-2:1-49.module_el8.8.0+1254+78119b6e.x86_64 4/16
Erasing : container-selinux-2:2.195.1-1.module_el8.8.0+1254+78119b6e.noarch 5/16
Running scriptlet: container-selinux-2:2.195.1-1.module_el8.8.0+1254+78119b6e.noarch 5/16
Erasing : podman-catatonit-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 6/16
Erasing : fuse-overlayfs-1.10-1.module_el8.8.0+1254+78119b6e.x86_64 7/16
Erasing : fuse3-3.3.0-16.el8.x86_64 8/16
Erasing : slirp4netns-1.2.0-2.module_el8.7.0+1216+b022c01d.x86_64 9/16
Erasing : runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64 10/16
Erasing : criu-3.15-3.module_el8.7.0+1216+b022c01d.x86_64 11/16
Erasing : libnet-1.1.6-15.el8.x86_64 12/16
Running scriptlet: libnet-1.1.6-15.el8.x86_64 12/16
Erasing : libslirp-4.4.0-1.module_el8.7.0+1216+b022c01d.x86_64 13/16
Erasing : fuse3-libs-3.3.0-16.el8.x86_64 14/16
Running scriptlet: fuse3-libs-3.3.0-16.el8.x86_64 14/16
Erasing : conmon-3:2.1.5-1.module_el8.8.0+1254+78119b6e.x86_64 15/16
Erasing : shadow-utils-subid-2:4.6-17.el8.x86_64 16/16
Running scriptlet: shadow-utils-subid-2:4.6-17.el8.x86_64 16/16
Verifying : buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64 1/16
Verifying : cockpit-podman-59-1.module_el8.8.0+1254+78119b6e.noarch 2/16
Verifying : conmon-3:2.1.5-1.module_el8.8.0+1254+78119b6e.x86_64 3/16
Verifying : container-selinux-2:2.195.1-1.module_el8.8.0+1254+78119b6e.noarch 4/16
Verifying : containers-common-2:1-49.module_el8.8.0+1254+78119b6e.x86_64 5/16
Verifying : criu-3.15-3.module_el8.7.0+1216+b022c01d.x86_64 6/16
Verifying : fuse-overlayfs-1.10-1.module_el8.8.0+1254+78119b6e.x86_64 7/16
Verifying : fuse3-3.3.0-16.el8.x86_64 8/16
Verifying : fuse3-libs-3.3.0-16.el8.x86_64 9/16
Verifying : libnet-1.1.6-15.el8.x86_64 10/16
Verifying : libslirp-4.4.0-1.module_el8.7.0+1216+b022c01d.x86_64 11/16
Verifying : podman-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 12/16
Verifying : podman-catatonit-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 13/16
Verifying : runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64 14/16
Verifying : shadow-utils-subid-2:4.6-17.el8.x86_64 15/16
Verifying : slirp4netns-1.2.0-2.module_el8.7.0+1216+b022c01d.x86_64 16/16
Removed:
buildah-1:1.28.2-2.module_el8.8.0+1254+78119b6e.x86_64 cockpit-podman-59-1.module_el8.8.0+1254+78119b6e.noarch
conmon-3:2.1.5-1.module_el8.8.0+1254+78119b6e.x86_64 container-selinux-2:2.195.1-1.module_el8.8.0+1254+78119b6e.noarch
containers-common-2:1-49.module_el8.8.0+1254+78119b6e.x86_64 criu-3.15-3.module_el8.7.0+1216+b022c01d.x86_64
fuse-overlayfs-1.10-1.module_el8.8.0+1254+78119b6e.x86_64 fuse3-3.3.0-16.el8.x86_64
fuse3-libs-3.3.0-16.el8.x86_64 libnet-1.1.6-15.el8.x86_64
libslirp-4.4.0-1.module_el8.7.0+1216+b022c01d.x86_64 podman-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64
podman-catatonit-3:4.3.1-2.module_el8.8.0+1254+78119b6e.x86_64 runc-1:1.1.4-1.module_el8.7.0+1216+b022c01d.x86_64
shadow-utils-subid-2:4.6-17.el8.x86_64 slirp4netns-1.2.0-2.module_el8.7.0+1216+b022c01d.x86_64
Complete!
[root@Hlanan ~]# yum -y install docker-ce
Last metadata expiration check: 0:16:50 ago on Tue 08 Oct 2024 03:05:24 PM CST.
Dependencies resolved.
================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================
Installing:
docker-ce x86_64 3:26.1.3-1.el8 docker-ce-stable 27 M
Installing dependencies:
container-selinux noarch 2:2.167.0-1.module_el8.5.0+911+f19012f9 AppStream 54 k
containerd.io x86_64 1.6.32-3.1.el8 docker-ce-stable 35 M
docker-ce-cli x86_64 1:26.1.3-1.el8 docker-ce-stable 7.8 M
libcgroup x86_64 0.41-19.el8 base 70 k
Installing weak dependencies:
docker-buildx-plugin x86_64 0.14.0-1.el8 docker-ce-stable 14 M
docker-compose-plugin x86_64 2.27.0-1.el8 docker-ce-stable 13 M
Transaction Summary
================================================================================================================================================================
Install 7 Packages
Total download size: 97 M
Installed size: 374 M
Downloading Packages:
(1/7): container-selinux-2.167.0-1.module_el8.5.0+911+f19012f9.noarch.rpm 629 kB/s | 54 kB 00:00
(2/7): libcgroup-0.41-19.el8.x86_64.rpm 450 kB/s | 70 kB 00:00
(3/7): docker-buildx-plugin-0.14.0-1.el8.x86_64.rpm 17 MB/s | 14 MB 00:00
(4/7): docker-ce-cli-26.1.3-1.el8.x86_64.rpm 20 MB/s | 7.8 MB 00:00
(5/7): docker-ce-26.1.3-1.el8.x86_64.rpm 18 MB/s | 27 MB 00:01
(6/7): containerd.io-1.6.32-3.1.el8.x86_64.rpm 18 MB/s | 35 MB 00:01
(7/7): docker-compose-plugin-2.27.0-1.el8.x86_64.rpm 18 MB/s | 13 MB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 48 MB/s | 97 MB 00:02
Docker CE Stable - x86_64 17 kB/s | 1.6 kB 00:00
Importing GPG key 0x621E9F35:
Userid : "Docker Release (CE rpm) <docker@docker.com>"
Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
From : https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : docker-compose-plugin-2.27.0-1.el8.x86_64 1/7
Running scriptlet: docker-compose-plugin-2.27.0-1.el8.x86_64 1/7
Running scriptlet: container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch 2/7
Installing : container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch 2/7
Running scriptlet: container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch 2/7
Installing : containerd.io-1.6.32-3.1.el8.x86_64 3/7
Running scriptlet: containerd.io-1.6.32-3.1.el8.x86_64 3/7
Installing : docker-buildx-plugin-0.14.0-1.el8.x86_64 4/7
Running scriptlet: docker-buildx-plugin-0.14.0-1.el8.x86_64 4/7
Installing : docker-ce-cli-1:26.1.3-1.el8.x86_64 5/7
Running scriptlet: docker-ce-cli-1:26.1.3-1.el8.x86_64 5/7
Running scriptlet: libcgroup-0.41-19.el8.x86_64 6/7
Installing : libcgroup-0.41-19.el8.x86_64 6/7
Running scriptlet: libcgroup-0.41-19.el8.x86_64 6/7
Installing : docker-ce-3:26.1.3-1.el8.x86_64 7/7
Running scriptlet: docker-ce-3:26.1.3-1.el8.x86_64 7/7
Running scriptlet: container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch 7/7
Running scriptlet: docker-ce-3:26.1.3-1.el8.x86_64 7/7
Verifying : libcgroup-0.41-19.el8.x86_64 1/7
Verifying : container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch 2/7
Verifying : containerd.io-1.6.32-3.1.el8.x86_64 3/7
Verifying : docker-buildx-plugin-0.14.0-1.el8.x86_64 4/7
Verifying : docker-ce-3:26.1.3-1.el8.x86_64 5/7
Verifying : docker-ce-cli-1:26.1.3-1.el8.x86_64 6/7
Verifying : docker-compose-plugin-2.27.0-1.el8.x86_64 7/7
Installed:
container-selinux-2:2.167.0-1.module_el8.5.0+911+f19012f9.noarch containerd.io-1.6.32-3.1.el8.x86_64 docker-buildx-plugin-0.14.0-1.el8.x86_64
docker-ce-3:26.1.3-1.el8.x86_64 docker-ce-cli-1:26.1.3-1.el8.x86_64 docker-compose-plugin-2.27.0-1.el8.x86_64
libcgroup-0.41-19.el8.x86_64
Complete!
[root@Hlanan ~]#如果需要指定安装docker的版本的话,采用如下命令
[root@Hlanan ~]# yum -y install docker-ce-20.10.24 docker-ce-cli-20.10.24查看安装的docker的版本
[root@Hlanan ~]# docker version
Client: Docker Engine - Community
Version: 26.1.3
API version: 1.45
Go version: go1.21.10
Git commit: b72abbb
Built: Thu May 16 08:34:39 2024
OS/Arch: linux/amd64
Context: default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@Hlanan ~]#启动docker,查看docker状态,设置开机自启
[root@Hlanan ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://docs.docker.com
[root@Hlanan ~]#
[root@Hlanan ~]# systemctl start docker
[root@Hlanan ~]# systemctl status docker
[root@Hlanan ~]#
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2024-10-08 15:28:58 CST; 1s ago
Docs: https://docs.docker.com
Main PID: 147389 (dockerd)
Tasks: 18
Memory: 36.6M
CGroup: /system.slice/docker.service
└─147389 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Oct 08 15:28:57 Hlanan systemd[1]: Starting Docker Application Container Engine...
Oct 08 15:28:57 Hlanan dockerd[147389]: time="2024-10-08T15:28:57.101692080+08:00" level=info msg="Starting up"
Oct 08 15:28:57 Hlanan dockerd[147389]: time="2024-10-08T15:28:57.136053043+08:00" level=info msg="Loading containers: start."
Oct 08 15:28:57 Hlanan dockerd[147389]: time="2024-10-08T15:28:57.984690734+08:00" level=info msg="Firewalld: interface docker0 already part of docker zone, re>
Oct 08 15:28:58 Hlanan dockerd[147389]: time="2024-10-08T15:28:58.061672054+08:00" level=info msg="Loading containers: done."
Oct 08 15:28:58 Hlanan dockerd[147389]: time="2024-10-08T15:28:58.090287963+08:00" level=info msg="Docker daemon" commit=8e96db1 containerd-snapshotter=false s>
Oct 08 15:28:58 Hlanan dockerd[147389]: time="2024-10-08T15:28:58.090430343+08:00" level=info msg="Daemon has completed initialization"
Oct 08 15:28:58 Hlanan dockerd[147389]: time="2024-10-08T15:28:58.108976764+08:00" level=info msg="API listen on /run/docker.sock"
Oct 08 15:28:58 Hlanan systemd[1]: Started Docker Application Container Engine.
[root@Hlanan ~]#
[root@Hlanan ~]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@Hlanan ~]#
1.4 Docker架构

1.5 容器和镜像的关系
想要创建容器,前提必须得有镜像。运行什么进程由镜像来决定。
1.6 Docker镜像管理
1.6.1 科学上网v2raya及v2ray-core
https://github.com/v2rayA/v2rayA
https://github.com/v2fly/v2ray-core
yum -y install v2raya_installer_redhat_x64_2.2.5.8.rpm
unzip v2ray-linux-64.zip -d ./v2ray
sudo mkdir -p /usr/local/share/v2ray
sudo cp ./v2ray/*dat /usr/local/share/v2ray
sudo install -Dm755 ./v2ray/v2ray /usr/local/bin/v2ray
systemctl restart v2raya.service
systemctl status v2raya.service[root@Hlanan ~]# yum -y install v2raya_installer_redhat_x64_2.2.5.8.rpm
Last metadata expiration check: 0:50:00 ago on Tue 08 Oct 2024 03:05:24 PM CST.
Dependencies resolved.
============================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================
Installing:
v2raya x86_64 2.2.5.8-1 @commandline 12 M
Transaction Summary
============================================================================================================================================
Install 1 Package
Total size: 12 M
Installed size: 29 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : v2raya-2.2.5.8-1.x86_64 1/1
Running scriptlet: v2raya-2.2.5.8-1.x86_64 1/1
******************************
* Completed! *
******************************
Verifying : v2raya-2.2.5.8-1.x86_64 1/1
Installed:
v2raya-2.2.5.8-1.x86_64
Complete!
[root@Hlanan ~]#
[root@Hlanan ~]# unzip v2ray-linux-64.zip -d ./v2ray
Archive: v2ray-linux-64.zip
inflating: ./v2ray/geoip.dat
inflating: ./v2ray/geoip-only-cn-private.dat
inflating: ./v2ray/v2ray
inflating: ./v2ray/config.json
creating: ./v2ray/systemd/
creating: ./v2ray/systemd/system/
inflating: ./v2ray/systemd/system/v2ray@.service
inflating: ./v2ray/systemd/system/v2ray.service
inflating: ./v2ray/geosite.dat
inflating: ./v2ray/vpoint_socks_vmess.json
inflating: ./v2ray/vpoint_vmess_freedom.json
[root@Hlanan ~]# ll
[root@Hlanan ~]# sudo mkdir -p /usr/local/share/v2ray
[root@Hlanan ~]# sudo cp ./v2ray/*dat /usr/local/share/v2ray
[root@Hlanan ~]# sudo install -Dm755 ./v2ray/v2ray /usr/local/bin/v2ray
[root@Hlanan ~]# systemctl restart v2raya.service
[root@Hlanan ~]# systemctl status v2raya.service
● v2raya.service - v2rayA Service
Loaded: loaded (/usr/lib/systemd/system/v2raya.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-10-08 16:01:13 CST; 6s ago
Docs: https://github.com/v2rayA/v2rayA/wiki
Main PID: 159894 (v2raya)
Tasks: 10 (limit: 48701)
Memory: 17.4M
CGroup: /system.slice/v2raya.service
└─159894 /usr/bin/v2raya --log-disable-timestamp
Oct 08 16:01:13 Hlanan systemd[1]: Started v2rayA Service.
[root@Hlanan ~]#
v2raya默认端口号2017:http://zhangbx.cn:2017登陆v2raya,配置代理。现在可以进入v2rayA登陆UI界面了。在第一次进入页面时,你需要创建一个管理员账号,请妥善保管你的用户名密码,如果遗忘,使用sudo v2raya --reset-password命令重置。

1.6.2 登陆dockerhub
登陆Dockerhub,国内已封锁dockerhub,需科学上网才可登录
[root@Hlanan ~]# docker login
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/
Username: zhang.bx@outlook.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
### 1.6.3 拉取镜像
[root@Hlanan ~]# docker pull xhofe/alist
Using default tag: latest
latest: Pulling from xhofe/alist
32b772fa5071: Pull complete
c56eaf8e1da4: Pull complete
b032813f06fb: Pull complete
edd92cbb75e9: Pull complete
a3c108e06e96: Pull complete
7ef37283fb00: Pull complete
Digest: sha256:8822a7fe89c1cb255d26251220acb948a1faa58130c49ac7f85268b9f7c5d516
Status: Downloaded newer image for xhofe/alist:latest
docker.io/xhofe/alist:latest
[root@Hlanan ~]#
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xhofe/alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]#1.6.4 镜像重命名
镜像重命名时不能镜像名不能用大写字母
[root@Hlanan ~]# docker tag xhofe/alist alist
[root@Hlanan ~]#
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xhofe/alist latest db320b123a98 2 weeks ago 97.2MB
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]#
[root@Hlanan ~]# docker tag alist:latest alist:1.0
[root@Hlanan ~]# docker tag alist:latest alist:2.0
[root@Hlanan ~]# docker tag alist:latest alist:3.0
[root@Hlanan ~]#
[root@Hlanan ~]# docker save alist:1.0 alist:2.0 alist:3.0 > /root/alist-1.tar
[root@Hlanan ~]# ll
total 224612
-rw-r--r--. 1 root root 98364928 Oct 8 16:47 alist-1.tar
[root@Hlanan ~]#1.6.5 镜像删除
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xhofe/alist latest db320b123a98 2 weeks ago 97.2MB
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]# docker rmi xhofe/alist
Untagged: xhofe/alist:latest
Untagged: xhofe/alist@sha256:8822a7fe89c1cb255d26251220acb948a1faa58130c49ac7f85268b9f7c5d516
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]#1.6.6 镜像导出和导入
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]# docker save alist > /root/alist.tar
[root@Hlanan ~]# ll
total 128552
-rw-r--r--. 1 root root 98364416 Oct 8 16:39 alist.tar
[root@Hlanan ~]#再导入压缩包,会自动解压
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@Hlanan ~]# docker load -i /root/alist.tar
30f8e4588c9e: Loading layer [==================================================>] 8.081MB/8.081MB
b0df0f150067: Loading layer [==================================================>] 2.048kB/2.048kB
6746ab1f9ae9: Loading layer [==================================================>] 11.37MB/11.37MB
1150ed625e8f: Loading layer [==================================================>] 78.88MB/78.88MB
9c909fbeae5b: Loading layer [==================================================>] 2.048kB/2.048kB
90aea256876c: Loading layer [==================================================>] 2.048kB/2.048kB
Loaded image: alist:latest
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]#1.6.7 脚本批量删除镜像
#!/bin/bash docker rmi -f $(docker images -q)
[root@Hlanan ~]# docker images -q
db320b123a98
db320b123a98
db320b123a98
db320b123a98
[root@Hlanan ~]# docker rmi -f $(docker images -q)
Untagged: alist:1.0
Untagged: alist:2.0
Untagged: alist:3.0
Untagged: alist:latest
Deleted: sha256:db320b123a98c682c9905e91e1b351cba83b20d2dfb2038fe711fd70439ff87b
Deleted: sha256:53238a0fc3f19b72e0fb93f722b9ea06289141b9c0ef2bb8fa9921003d8d9cdb
Deleted: sha256:8ccaa6a1536df5c8d42727eb5e130583d2c1aa321e89d2144a259df590677295
Deleted: sha256:0af7e5280bcb6f8e8035ba008cdfd961f75706433b18cae007035667a7774815
Deleted: sha256:eed8acd65df88e17a5f6def7ee4f851759dfeb3de5314dac10c53e6889ab71cb
Deleted: sha256:b4e4aa34d27f3cef2f721c39acb6aa23b8b17f1b26c92e39fc927011714c31e6
Deleted: sha256:30f8e4588c9e02cc64ca7c31900a63826b14b9f77786fc8a13f6a641da95266e
Error response from daemon: No such image: db320b123a98:latest
Error response from daemon: No such image: db320b123a98:latest
Error response from daemon: No such image: db320b123a98:latest
[root@Hlanan ~]#
[root@Hlanan ~]# vim delimages.sh
[root@Hlanan ~]# cat delimages.sh
#!/bin/bash
docker rmi -f $(docker images -q)
[root@Hlanan ~]#
[root@Hlanan ~]# vim delimages.sh
[root@Hlanan ~]# cat delimages.sh
#!/bin/bash
docker rmi -f $(docker images -q)
[root@Hlanan ~]#
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alist 1.0 db320b123a98 2 weeks ago 97.2MB
alist 2.0 db320b123a98 2 weeks ago 97.2MB
alist 3.0 db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]# sh delimages.sh
Untagged: alist:1.0
Untagged: alist:2.0
Untagged: alist:3.0
Deleted: sha256:db320b123a98c682c9905e91e1b351cba83b20d2dfb2038fe711fd70439ff87b
Deleted: sha256:53238a0fc3f19b72e0fb93f722b9ea06289141b9c0ef2bb8fa9921003d8d9cdb
Deleted: sha256:8ccaa6a1536df5c8d42727eb5e130583d2c1aa321e89d2144a259df590677295
Deleted: sha256:0af7e5280bcb6f8e8035ba008cdfd961f75706433b18cae007035667a7774815
Deleted: sha256:eed8acd65df88e17a5f6def7ee4f851759dfeb3de5314dac10c53e6889ab71cb
Deleted: sha256:b4e4aa34d27f3cef2f721c39acb6aa23b8b17f1b26c92e39fc927011714c31e6
Deleted: sha256:30f8e4588c9e02cc64ca7c31900a63826b14b9f77786fc8a13f6a641da95266e
[root@Hlanan ~]#
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@Hlanan ~]#
1.6.8 docker镜像的分层(历史版本)
利用history查询镜像的历史版本或者说叫镜像的分层
[root@Hlanan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alist latest db320b123a98 2 weeks ago 97.2MB
[root@Hlanan ~]# docker history alist:latest
IMAGE CREATED CREATED BY SIZE COMMENT
db320b123a98 2 weeks ago CMD ["/entrypoint.sh"] 0B buildkit.dockerfile.v0
<missing> 2 weeks ago EXPOSE map[5244/tcp:{} 5245/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 2 weeks ago VOLUME [/opt/alist/data/] 0B buildkit.dockerfile.v0
<missing> 2 weeks ago ENV PUID=0 PGID=0 UMASK=022 0B buildkit.dockerfile.v0
<missing> 2 weeks ago RUN |2 TARGETPLATFORM=linux/amd64 INSTALL_FF… 180B buildkit.dockerfile.v0
<missing> 2 weeks ago COPY entrypoint.sh /entrypoint.sh # buildkit 180B buildkit.dockerfile.v0
<missing> 2 weeks ago COPY /build/linux/amd64/alist ./ # buildkit 78.9MB buildkit.dockerfile.v0
<missing> 2 weeks ago RUN |2 TARGETPLATFORM=linux/amd64 INSTALL_FF… 10.5MB buildkit.dockerfile.v0
<missing> 2 weeks ago WORKDIR /opt/alist/ 0B buildkit.dockerfile.v0
<missing> 2 weeks ago LABEL MAINTAINER=i@nn.ci 0B buildkit.dockerfile.v0
<missing> 2 weeks ago ARG INSTALL_FFMPEG=false 0B buildkit.dockerfile.v0
<missing> 2 weeks ago ARG TARGETPLATFORM=linux/amd64 0B buildkit.dockerfile.v0
<missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:fd7eb8b8156b429f8… 7.8MB
[root@Hlanan ~]#1.7 容器管理
1.7.1 创建容器及查看日志
[root@Hlanan ~]# docker run -itd alist
ad040a45ec45f3e9ce11eae2ab1ae8961ca8864a4a72d13176c4bf6534a3207d
[root@Hlanan ~]#
[root@Hlanan ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad040a45ec45 alist "/entrypoint.sh" 3 seconds ago Up 2 seconds 5244-5245/tcp brave_wing
[root@Hlanan ~]# docker logs brave_wing
INFO[2024-10-08 09:01:57] reading config file: data/config.json
INFO[2024-10-08 09:01:57] config file not exists, creating default config file
INFO[2024-10-08 09:01:57] load config from env with prefix:
INFO[2024-10-08 09:01:57] init logrus...
INFO[2024-10-08 09:01:57] Successfully created the admin user and the initial password is: OxnXCsRQ
WARN[2024-10-08 09:01:57] init tool aria2 failed: failed get aria2 version: Post "http://localhost:6800/jsonrpc": dial tcp [::1]:6800: connect: connection refused
INFO[2024-10-08 09:01:57] init tool SimpleHttp success: ok
INFO[2024-10-08 09:01:57] init tool pikpak success: ok
WARN[2024-10-08 09:01:57] init tool qBittorrent failed: Post "http://localhost:8080/api/v2/auth/login": dial tcp [::1]:8080: connect: connection refused
INFO[2024-10-08 09:01:57] init tool 115 Cloud success: ok
INFO[2024-10-08 09:01:57] start HTTP server @ 0.0.0.0:5244
[root@Hlanan ~]#1.7.2 查询容器
[root@Hlanan ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad040a45ec45 alist "/entrypoint.sh" About a minute ago Up About a minute 5244-5245/tcp brave_wing
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad040a45ec45 alist "/entrypoint.sh" About a minute ago Up About a minute 5244-5245/tcp brave_wing
e1e6d5d180c4 alist "/entrypoint.sh" About a minute ago Exited (0) About a minute ago great_borg
[root@Hlanan ~]#1.7.3 删除容器
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad040a45ec45 alist "/entrypoint.sh" 3 minutes ago Up 3 minutes 5244-5245/tcp brave_wing
[root@Hlanan ~]# docker stop brave_wing
brave_wing
[root@Hlanan ~]# docker rm brave_wing
brave_wing
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@Hlanan ~]#1.7.4 为容器添加一个伪终端(-t)
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@Hlanan ~]#
[root@Hlanan ~]#
[root@Hlanan ~]#
[root@Hlanan ~]# docker run -t alpine
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
43c4264eed91: Pull complete
Digest: sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d
Status: Downloaded newer image for alpine:latest
/ # ^[[53;5R
cd
cd复制一个新的SSH连接
[root@Hlanan ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0e33a5ddeaad alpine "/bin/sh" 13 seconds ago Up 11 seconds goofy_lamarr
[root@Hlanan ~]#此时停止该容器
[root@Hlanan ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0e33a5ddeaad alpine "/bin/sh" 3 minutes ago Up 3 minutes goofy_lamarr
[root@Hlanan ~]# docker rm 0e33a5ddeaad
Error response from daemon: cannot remove container "/goofy_lamarr": container is running: stop the container before removing or force remove
[root@Hlanan ~]# docker stop 0e33a5ddeaad
0e33a5ddeaad
[root@Hlanan ~]#回到第一个SSH连接,回车,就从容器退出了
[root@Hlanan ~]# docker run -t alpine
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
43c4264eed91: Pull complete
Digest: sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06d
Status: Downloaded newer image for alpine:latest
/ # ^[[53;5R
cd
cd
ls
^C^C
/ # ^[[53;5R
^C^C
/ # ^[[53;5R
[root@Hlanan ~]# ;5R
-bash: syntax error near unexpected token `;'
[root@Hlanan ~]#刚用-t创建的容器创建成功后里面卡住了
因为这个容器虽然有终端来承载bash命令,但是没有交互,所以无法运行指令。
1.7.5 为容器添加交互(-i)
[root@Hlanan ~]# docker run -ti alpine
/ # sh
/ # ll
sh: ll: not found
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
/ # mkdir zhang
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var zhang
/ # cd zhang/
/zhang #
/zhang #
在第二个ssh链接里面查看容器状态
[root@Hlanan ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55d44565ab4e alpine "/bin/sh" 2 minutes ago Up 2 minutes sad_yonath
[root@Hlanan ~]#在第一个ssh连接里面退出容器
[root@Hlanan ~]# docker run -ti alpine
/ # sh
/ # exit
[root@Hlanan ~]#在第二个ssh链接里面查看容器状态
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55d44565ab4e alpine "/bin/sh" 4 minutes ago Exited (0) About a minute ago sad_yonath
[root@Hlanan ~]#如果你每次退出容器,容器状态就变为exit的话,那么容器里面的APP就不运行
那怎么办才能让你即使exit退出容器,而容器还是up呢
1.7.6 为容器添加持续运行(--restart always)
docker run -ti --restart always alpine
[root@Hlanan ~]# docker run -ti --restart always alpine
/ #
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
/ #在第二个ssh链接里面查看容器状态
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3bdf510d3a7 alpine "/bin/sh" About a minute ago Up About a minute agitated_liskov
[root@Hlanan ~]#在第一个ssh连接里面退出容器
[root@Hlanan ~]# docker run -ti --restart always alpine
/ #
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
/ # exit
[root@Hlanan ~]#在第二个ssh链接里面查看容器状态
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3bdf510d3a7 alpine "/bin/sh" 2 minutes ago Up 11 seconds agitated_liskov
[root@Hlanan ~]#exit退出了容器,再查看容器还是up的,容器里面的APP肯定还能工作
以上这些方式创建容器后,直接进入到容器里面,就可以执行相关命令了。
这时候,你又发现问题了。感觉不方便呀,创建容器后,它默认直接进入到容器里面了,这不是我想要的,单独创建好,我可以随时去连接容器。就是让容器在后台运行。
1.7.7 为容器添加后端运行(-d)
[root@Hlanan ~]# docker run -tid --restart always alpine
14f12fe8a1f35ad73e7bea67347d2ade6a8368840aa38947939a96373d0c666c
[root@Hlanan ~]#
[root@Hlanan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14f12fe8a1f3 alpine "/bin/sh" 4 seconds ago Up 3 seconds busy_babbage
[root@Hlanan ~]#