实验中,宿主机的操作系统的版本信息:
[root@centos8 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@centos8 ~]#
[root@centos8 ~]# uname -r
4.18.0-193.el8.x86_64
先安装依赖软件包:
[root@centos8 ~]# yum -y install yum-utils
配置阿里云的Docker镜像地址:
[root@centos8 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加仓库自:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@centos8 ~]#
生成缓存:
[root@centos8 ~]# yum makecache
CentOS-8.5.2111 - Base - mirrors.aliyun.com 19 kB/s | 3.9 kB 00:00
CentOS-8.5.2111 - Extras - mirrors.aliyun.com 4.9 kB/s | 1.5 kB 00:00
CentOS-8.5.2111 - AppStream - mirrors.aliyun.com 15 kB/s | 4.3 kB 00:00
Docker CE Stable - x86_64 19 kB/s | 31 kB 00:01
元数据缓存已建立。
[root@centos8 ~]#
安装最新版的Docker:
[root@centos8 ~]# yum -y install docker-ce docker-ce-cli containerd.io
启动Docker:
[root@centos8 ~]# systemctl start docker
[root@centos8 ~]#
启动Docker后,宿主机的网卡会发生变化:
[root@centos8 ~]# ifconfig
-bash: ifconfig: 未找到命令
[root@centos8 ~]#
[root@centos8 ~]# yum -y install net-tools
[root@centos8 ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:37ff:fe06:3fef prefixlen 64 scopeid 0x20<link>
ether 02:42:37:06:3f:ef txqueuelen 0 (Ethernet)
RX packets 8056 bytes 325711 (318.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8451 bytes 17672646 (16.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.168.154 netmask 255.255.255.0 broadcast 192.168.168.255
inet6 fe80::92ab:5fb4:5373:ad53 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:cb:1e:40 txqueuelen 1000 (Ethernet)
RX packets 357979 bytes 519205713 (495.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 128916 bytes 8255043 (7.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@centos8 ~]#
查看Docker的版本信息:
[root@centos8 ~]# docker -v
Docker version 20.10.21, build baeda1f
[root@centos8 ~]#
查看Docker相关软件的版本信息:
[root@centos8 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:02:19 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.7
Git commit: 3056208
Built: Tue Oct 25 18:00:24 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: 770bd0108c32f3fb5c73ae1264f7e503fe7b2661
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@centos8 ~]#
查看Docker的相关信息:
[root@centos8 ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
scan: Docker Scan (Docker Inc., v0.21.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.21
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
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: 770bd0108c32f3fb5c73ae1264f7e503fe7b2661
runc version: v1.1.4-0-g5fd4c4d
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 4.18.0-193.el8.x86_64
Operating System: CentOS Linux 8 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.758GiB
Name: centos8.zhuohua.store
ID: 5BLP:IZCR:6SS2:2U26:73K7:U7HR:RIFK:NDPD:76V4:Q674:QNTX:GRWQ
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
[root@centos8 ~]#
注释:Docker的镜像、容器默认是存放在目录/var/lib/docker下
查看宿主机的所有镜像:( Docker安装完毕后,默认是没有任何镜像 )
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@centos8 ~]#
从公网下载镜像:( 以下是下载Python3.11的镜像 )
[root@centos8 ~]# docker pull python:3.11
3.11: Pulling from library/python
a8ca11554fce: Pull complete
e4e46864aba2: Pull complete
c85a0be79bfb: Pull complete
195ea6a58ca8: Pull complete
157f16ed0a0c: Pull complete
884b144bec28: Pull complete
1c469643b609: Pull complete
4c0ac982aa89: Pull complete
049db2c7eb8a: Pull complete
Digest: sha256:edd5164e98f8925a78216fc35841041dea32f00b1668329aa3cee6bf0e53c03b
Status: Downloaded newer image for python:3.11
docker.io/library/python:3.11
[root@centos8 ~]#
再次,查看宿主机的所有镜像:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
使用镜像“python:3.11”创建并启动容器“Python3.11”:
[root@centos8 ~]# docker run -itd --name Python3.11 -v /opt/python_home:/home/python_home python:3.11
0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594
[root@centos8 ~]#
注释:
-itd : 以交互模式情况下后台运行。
--name : 指定容器名称。
-v 挂载目录 : 这里是把宿主机的目录/opt/python_home挂载到容器的目录/home/python_home;假如目录不存在,就会自动创建。
python:3.11 : 镜像名称:版本号
在宿主机查看正在运行的容器:
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 27 seconds ago Up 25 seconds Python3.11
[root@centos8 ~]#
######
实验中,宿主机中没有安装Python3:
[root@centos8 ~]# python3
-bash: python3: 未找到命令
[root@centos8 ~]#
宿主机的硬盘分区情况:
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 7.7G 0 rom
nvme0n1 259:0 0 80G 0 disk
├─nvme0n1p1 259:1 0 200M 0 part /boot
└─nvme0n1p2 259:2 0 79.8G 0 part
├─cl-root 253:0 0 75.8G 0 lvm /
└─cl-swap 253:1 0 4G 0 lvm [SWAP]
[root@centos8 ~]#
[root@centos8 ~]# df -hTP
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 883M 0 883M 0% /dev
tmpfs tmpfs 901M 0 901M 0% /dev/shm
tmpfs tmpfs 901M 17M 884M 2% /run
tmpfs tmpfs 901M 0 901M 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 76G 3.2G 73G 5% /
/dev/nvme0n1p1 ext4 190M 141M 36M 80% /boot
tmpfs tmpfs 181M 0 181M 0% /run/user/0
overlay overlay 76G 3.2G 73G 5% /var/lib/docker/overlay2/b50fc1a2a2e51da58936e98390dccb14301cf16b080b13ed5f85693ce83dce12/merged
[root@centos8 ~]#
###
进入容器“Python3.11”:
[root@centos8 ~]# docker exec -it Python3.11 /bin/bash
root@0a2ea514887e:/#
查看容器“Python3.11”的系统版本信息:
root@0a2ea514887e:/# cat /etc/issue
Debian GNU/Linux 11 \n \l
root@0a2ea514887e:/#
root@0a2ea514887e:/# more /etc/debian_version
11.5
root@0a2ea514887e:/#
root@0a2ea514887e:/# uname -r
4.18.0-193.el8.x86_64
root@0a2ea514887e:/#
查看容器“Python3.11”的IP地址:
root@0a2ea514887e:~# ifconfig
bash: ifconfig: command not found
root@0a2ea514887e:~#
root@0a2ea514887e:~# apt-get update
root@0a2ea514887e:~# apt-get -y install net-tools
root@0a2ea514887e:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8538 bytes 17928024 (17.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8137 bytes 443152 (432.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@0a2ea514887e:~#
备注:
默认情况下,容器每次重启后,都会自行分配IP地址,且不允许自行指定或更改;
正常的话,容器“Python3.11”是可以Ping通宿主机:
root@0a2ea514887e:~# ping 172.17.0.1
bash: ping: command not found
root@0a2ea514887e:~#
root@0a2ea514887e:~# apt-get -y install inetutils-ping
root@0a2ea514887e:~# ping -c 4 172.17.0.1
PING 172.17.0.1 (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: icmp_seq=0 ttl=64 time=0.108 ms
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.103 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.097 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.127 ms
--- 172.17.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.097/0.109/0.127/0.000 ms
root@0a2ea514887e:~#
root@0a2ea514887e:/# ping -c 4 192.168.168.154
PING 192.168.168.154 (192.168.168.154): 56 data bytes
64 bytes from 192.168.168.154: icmp_seq=0 ttl=64 time=0.110 ms
64 bytes from 192.168.168.154: icmp_seq=1 ttl=64 time=0.398 ms
64 bytes from 192.168.168.154: icmp_seq=2 ttl=64 time=0.098 ms
64 bytes from 192.168.168.154: icmp_seq=3 ttl=64 time=0.082 ms
--- 192.168.168.154 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.082/0.172/0.398/0.131 ms
root@0a2ea514887e:/#
正常的话,容器“Python3.11”是可以访问公网:
root@0a2ea514887e:/# ping -c 5 blog.zhuohua.store
PING blog.zhuohua.store (47.75.39.177): 56 data bytes
64 bytes from 47.75.39.177: icmp_seq=0 ttl=127 time=29.955 ms
64 bytes from 47.75.39.177: icmp_seq=1 ttl=127 time=20.810 ms
64 bytes from 47.75.39.177: icmp_seq=2 ttl=127 time=18.695 ms
64 bytes from 47.75.39.177: icmp_seq=3 ttl=127 time=20.560 ms
64 bytes from 47.75.39.177: icmp_seq=4 ttl=127 time=17.836 ms
--- blog.zhuohua.store ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 17.836/21.571/29.955/4.339 ms
root@0a2ea514887e:/#
容器“Python3.11”的硬盘分区情况:(与宿主机的硬盘分区是不同的)
root@0a2ea514887e:/# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 7.7G 0 rom
nvme0n1 259:0 0 80G 0 disk
├─nvme0n1p1 259:1 0 200M 0 part
└─nvme0n1p2 259:2 0 79.8G 0 part
root@0a2ea514887e:/#
root@0a2ea514887e:/# df -hTP
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 3.2G 73G 5% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 901M 0 901M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/mapper/cl-root xfs 76G 3.2G 73G 5% /home/python_home
tmpfs tmpfs 901M 0 901M 0% /proc/asound
tmpfs tmpfs 901M 0 901M 0% /proc/acpi
tmpfs tmpfs 901M 0 901M 0% /proc/scsi
tmpfs tmpfs 901M 0 901M 0% /sys/firmware
root@0a2ea514887e:/#
######
容器“Python3.11”已经安装好Python3:
root@0a2ea514887e:/# python3
Python 3.11.0 (main, Nov 15 2022, 19:58:01) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Welcome to zhuohua.')
Welcome to zhuohua.
>>>
退出当前的容器:
root@0a2ea514887e:/# exit
exit
[root@centos8 ~]#
在宿主机查看正在运行的容器:
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 21 minutes ago Up 21 minutes Python3.11
[root@centos8 ~]#
停止容器“Python3.11”:
[root@centos8 ~]# docker stop Python3.11
Python3.11
[root@centos8 ~]#
再次,在宿主机查看正在运行的容器:
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@centos8 ~]#
在宿主机查看所有的容器:(无论是否正在运行)
[root@centos8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 23 minutes ago Exited (137) About a minute ago Python3.11
[root@centos8 ~]#
启动容器“Python3.11”:(启动已经存在的容器,要用这个方式)
[root@centos8 ~]# docker start Python3.11
Python3.11
[root@centos8 ~]#
再次,在宿主机查看所有的容器:
[root@centos8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 25 minutes ago Up 12 seconds Python3.11
[root@centos8 ~]#
###
容器“Python3.11”在宿主机的存放目录:
[root@centos8 ~]# cd /var/lib/docker/
[root@centos8 docker]# ls
buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
[root@centos8 docker]#
[root@centos8 docker]# cd containers/
[root@centos8 containers]# ls
0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594
[root@centos8 containers]#
[root@centos8 containers]# pwd
/var/lib/docker/containers
[root@centos8 containers]#
[root@centos8 containers]# cd 0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594
[root@centos8 0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594]# ls
0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594-json.log hostconfig.json mounts
checkpoints hostname resolv.conf
config.v2.json hosts resolv.conf.hash
[root@centos8 0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594]#
容器“Python3.11”的文件config.v2.json中的一些信息:
容器ID : "Config":{"Hostname":"0a2ea514887e",
Python相关软件的版本:
"PYTHON_VERSION=3.11.0","PYTHON_PIP_VERSION=22.3","PYTHON_SETUPTOOLS_VERSION=65.5.0",
######
在宿主机的目录/opt/python_home里创建一个脚本“file_01.py”:
[root@centos8 ~]# cd /opt/python_home
[root@centos8 python_home]#
[root@centos8 python_home]# pwd
/opt/python_home
[root@centos8 python_home]# cat file_01.py
#coding=utf-8
print('Welcome to zhuohua.')
[root@centos8 python_home]#
进入容器“Python3.11”:
root@0a2ea514887e:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@0a2ea514887e:/#
root@0a2ea514887e:/# cd home/
root@0a2ea514887e:/home# ls
python_home
root@0a2ea514887e:/home# cd python_home/
root@0a2ea514887e:/home/python_home# ls
file_01.py
root@0a2ea514887e:/home/python_home# cat file_01.py
#coding=utf-8
print('Welcome to zhuohua.')
root@0a2ea514887e:/home/python_home#
注释:因为在创建容器“Python3.11”的时候,把宿主机的目录/opt/python_home挂载到容器的目录/home/python_home,所以这两个目录里的数据是双向同步的。
在容器“Python3.11”中运行脚本“file_01.py”:
root@0a2ea514887e:/home/python_home# cd
root@0a2ea514887e:~#
root@0a2ea514887e:~# pwd
/root
root@0a2ea514887e:~# python3 /home/python_home/file_01.py
Welcome to zhuohua.
root@0a2ea514887e:~#
######
在容器“Python3.11”中安装第三方库(psutil):
root@0a2ea514887e:~# pip3 freeze
root@0a2ea514887e:~#
root@0a2ea514887e:~# pip3 install psutil -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
root@0a2ea514887e:~# pip3 freeze
psutil==5.9.4
root@0a2ea514887e:~#
在容器“Python3.11”的目录/home/python_home里创建一个脚本“file_02.py”:
root@0a2ea514887e:~# vim /home/python_home/file_02.py
bash: vim: command not found
root@0a2ea514887e:~#
在容器“Python3.11”中安装命令vim:
root@0a2ea514887e:~# apt-get -y install vim
在容器“Python3.11”中查看创建好的脚本“file_02.py”:
root@0a2ea514887e:~# cat /home/python_home/file_02.py
#coding=utf-8
import psutil
CPU_use_percent = psutil.cpu_percent(interval=2)
print(CPU_use_percent)
print(type(CPU_use_percent))
print(f"CPU使用率: {CPU_use_percent}%")
print("-" * 10)
Mem_total = psutil.virtual_memory().total
Mem_total = round(Mem_total / 1024 / 1024,2)
print(f"总内存量: {Mem_total}MB")
Mem_used = psutil.virtual_memory().used
Mem_used = round(Mem_used / 1024 / 1024,2)
print(f"已使用内存量: {Mem_used}MB")
print("-" * 10)
Mem_use_percent = psutil.virtual_memory().percent
print(Mem_use_percent)
print(f"内存使用率: {Mem_use_percent}%")
root@0a2ea514887e:~#
在容器“Python3.11”中运行脚本“file_02.py”:
root@0a2ea514887e:~# find / -name "python3"
/etc/python3
/usr/bin/python3
/usr/lib/python3
/usr/local/bin/python3
/usr/share/doc/python3
/usr/share/lintian/overrides/python3
/usr/share/python3
root@0a2ea514887e:~#
root@0a2ea514887e:~# /usr/local/bin/python3 /home/python_home/file_02.py
1.5
<class 'float'>
CPU使用率: 1.5%
----------
总内存量: 1800.62MB
已使用内存量: 434.42MB
----------
34.8
内存使用率: 34.8%
root@0a2ea514887e:~#
在宿主机中也可以看到脚本“file_02.py”:
[root@centos8 python_home]# pwd
/opt/python_home
[root@centos8 python_home]# ls
file_01.py file_02.py
[root@centos8 python_home]#
[root@centos8 python_home]# cat file_02.py
#coding=utf-8
import psutil
CPU_use_percent = psutil.cpu_percent(interval=2)
print(CPU_use_percent)
print(type(CPU_use_percent))
print(f"CPU使用率: {CPU_use_percent}%")
print("-" * 10)
Mem_total = psutil.virtual_memory().total
Mem_total = round(Mem_total / 1024 / 1024,2)
print(f"总内存量: {Mem_total}MB")
Mem_used = psutil.virtual_memory().used
Mem_used = round(Mem_used / 1024 / 1024,2)
print(f"已使用内存量: {Mem_used}MB")
print("-" * 10)
Mem_use_percent = psutil.virtual_memory().percent
print(Mem_use_percent)
print(f"内存使用率: {Mem_use_percent}%")
[root@centos8 python_home]#
############
############
在宿主机移动容器“Python3.11”:
先停止容器“Python3.11”:
[root@centos8 ~]# docker stop Python3.11
Python3.11
[root@centos8 ~]#
要把容器“Python3.11”创建成一个新镜像:
[root@centos8 ~]# docker commit Python3.11 newimage_python3
sha256:4ef2acde4a35fd4f6f435f3be7d1c1af7b7eac90f4b6868cb79fa838d02e3ed3
[root@centos8 ~]#
新镜像“newimage_python3:latest”创建成功:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newimage_python3 latest 4ef2acde4a35 16 seconds ago 1GB
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
把新镜像“newimage_python3:latest”另外备份好:
[root@centos8 ~]# docker save newimage_python3:latest > /tmp/newimage_python3.tar
[root@centos8 ~]#
[root@centos8 ~]# du -sh /tmp/newimage_python3.tar
980M /tmp/newimage_python3.tar
[root@centos8 ~]#
备注:新镜像可以放到其他宿主机上使用了,新宿主机无需有原始镜像“python:3.11”
在宿主机删除镜像“newimage_python3:latest”:
[root@centos8 ~]# docker rmi -f newimage_python3:latest
Untagged: newimage_python3:latest
Deleted: sha256:4ef2acde4a35fd4f6f435f3be7d1c1af7b7eac90f4b6868cb79fa838d02e3ed3
Deleted: sha256:90b802c6cda11fe25cde6be460afc4afdd272cad662ea4a3d90745b3a469da98
[root@centos8 ~]#
新镜像“newimage_python3:latest”删除成功:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
从备份文件“/tmp/newimage_python3.tar”还原镜像“newimage_python3:latest”:
[root@centos8 ~]# docker load < /tmp/newimage_python3.tar
5354e9f5b03b: Loading layer [==================================================>] 72.78MB/72.78MB
Loaded image: newimage_python3:latest
[root@centos8 ~]#
镜像“newimage_python3:latest”还原成功:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newimage_python3 latest 4ef2acde4a35 5 minutes ago 1GB
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
修改镜像“newimage_python3:latest”的版本号:
[root@centos8 ~]# docker tag newimage_python3:latest newimage_python3:8.11
[root@centos8 ~]#
版本号修改成功:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newimage_python3 8.11 4ef2acde4a35 6 minutes ago 1GB
newimage_python3 latest 4ef2acde4a35 6 minutes ago 1GB
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
再次,删除镜像“newimage_python3:latest”:
[root@centos8 ~]# docker rmi -f newimage_python3:latest
Untagged: newimage_python3:latest
[root@centos8 ~]#
再次,查看宿主机的所有镜像:
[root@centos8 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newimage_python3 8.11 4ef2acde4a35 7 minutes ago 1GB
python 3.11 ee4e7a0f1c35 2 weeks ago 932MB
[root@centos8 ~]#
在宿主机查看正在运行的容器:
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 18 hours ago Up About a minute Python3.11
[root@centos8 ~]#
使用镜像“newimage_python3:8.11”创建并启动容器“Python811”:
[root@centos8 ~]# docker run -itd --name Python811 -v /opt/python_home:/home/python_home newimage_python3:8.11
f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b
[root@centos8 ~]#
注释:
-itd : 以交互模式情况下后台运行。
--name : 指定容器名称。
-v 挂载目录 : 这里是把宿主机的目录/opt/python_home挂载到容器的目录/home/python_home;假如宿主机的目录已经存在,也不会覆盖原有数据;可以把宿主机的一个目录同时挂载到多个容器的目录。
newimage_python3:8.11 : 镜像名称:版本号
再次,在宿主机查看正在运行的容器:
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c959f81303 newimage_python3:8.11 "python3" About a minute ago Up About a minute Python811
0a2ea514887e python:3.11 "python3" 18 hours ago Up 3 minutes Python3.11
[root@centos8 ~]#
###
进入容器“Python811”:
[root@centos8 ~]# docker exec -it Python811 /bin/bash
root@f7c959f81303:/#
查看容器“Python811”的IP地址:
root@f7c959f81303:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 11 bytes 866 (866.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@f7c959f81303:/#
备注:
默认情况下,容器每次重启后,都会自行分配IP地址,且IP地址是不会重复的;
正常的话,容器“Python811”是可以Ping通宿主机:
root@f7c959f81303:/# ping -c 4 172.17.0.1
PING 172.17.0.1 (172.17.0.1): 56 data bytes
64 bytes from 172.17.0.1: icmp_seq=0 ttl=64 time=0.241 ms
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from 172.17.0.1: icmp_seq=3 ttl=64 time=0.091 ms
--- 172.17.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.082/0.126/0.241/0.067 ms
root@f7c959f81303:/#
root@f7c959f81303:/# ping -c 4 192.168.168.154
PING 192.168.168.154 (192.168.168.154): 56 data bytes
64 bytes from 192.168.168.154: icmp_seq=0 ttl=64 time=0.133 ms
64 bytes from 192.168.168.154: icmp_seq=1 ttl=64 time=0.236 ms
64 bytes from 192.168.168.154: icmp_seq=2 ttl=64 time=0.108 ms
64 bytes from 192.168.168.154: icmp_seq=3 ttl=64 time=0.161 ms
--- 192.168.168.154 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.108/0.160/0.236/0.048 ms
root@f7c959f81303:/#
正常的话,容器“Python811”是可以Ping通宿容器“Python3.11”:
root@f7c959f81303:/# ping -c 4 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.100 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.154 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.099 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.107 ms
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.099/0.115/0.154/0.023 ms
root@f7c959f81303:/#
###
查看容器“Python811”的目录/home/python_home:
root@f7c959f81303:/# cd /home/python_home
root@f7c959f81303:/home/python_home# ls
file_01.py file_02.py
root@f7c959f81303:/home/python_home#
在容器“Python811”中运行脚本“file_02.py”:
root@f7c959f81303:/home/python_home# python3 file_02.py
0.5
<class 'float'>
CPU使用率: 0.5%
----------
总内存量: 1800.62MB
已使用内存量: 355.64MB
----------
29.0
内存使用率: 29.0%
root@f7c959f81303:/home/python_home#
注释:因为在创建容器“Python811”的时候,也把宿主机的目录/opt/python_home挂载到自己的目录/home/python_home,所以宿主机的目录/opt/python_home、容器“Python3.11”的目录/home/python_home、容器“Python811”的目录/home/python_home的数据是共享的。
###
容器“Python811”在宿主机的存放目录:
[root@centos8 ~]# cd /var/lib/docker/containers/
[root@centos8 containers]# ls
0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594
f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b
[root@centos8 containers]#
[root@centos8 containers]# cd f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b/
[root@centos8 f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b]# ls
checkpoints hostconfig.json mounts
config.v2.json hostname resolv.conf
f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b-json.log hosts resolv.conf.hash
[root@centos8 f7c959f81303cec97bd6af948623afb4959acf68e6ddb0be4d9e63e416aa9c2b]#
容器“Python811”的文件config.v2.json中的一些信息:
容器ID : "Config":{"Hostname":"f7c959f81303",
挂载目录的信息:( 把宿主机的目录/opt/python_home挂载到容器的目录/home/python_home )
"MountPoints":{"/home/python_home":{"Source":"/opt/python_home","Destination":"/home/python_home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/opt/python_home","Target":"/home/python_home"},
以下是重新把宿主机的目录/home挂载到容器“Python811”的目录/home/python_home:
[root@centos8 ~]# docker stop Python811
[root@centos8 ~]# systemctl stop docker
"MountPoints":{"/home/python_home":{"Source":"/home","Destination":"/home/python_home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home","Target":"/home/python_home"},
[root@centos8 ~]# systemctl start docker
[root@centos8 ~]# docker start Python811
确认已经把宿主机的目录/home挂载到容器的目录/home/python_home:
查看宿主机的目录/home:
[root@centos8 ~]# du -ah /home/
22M /home/Python-3.6.8.tgz
22M /home/
[root@centos8 ~]#
重新进入容器“Python811”:
[root@centos8 ~]# docker exec -it Python811 /bin/bash
root@f7c959f81303:/#
查看容器“Python811”的目录/home/python_home:
root@f7c959f81303:~# du -ah /home/python_home/
22M /home/python_home/Python-3.6.8.tgz
22M /home/python_home/
root@f7c959f81303:~#
######
在宿主机查看所有的容器:
[root@centos8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c959f81303 newimage_python3:8.11 "python3" About an hour ago Up 8 minutes Python811
0a2ea514887e python:3.11 "python3" 20 hours ago Up 12 seconds Python3.11
[root@centos8 ~]#
停止容器“Python811”:(可以使用容器名称,也可以使用容器ID)
[root@centos8 ~]# docker stop f7c959f81303
f7c959f81303
[root@centos8 ~]#
[root@centos8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c959f81303 newimage_python3:8.11 "python3" About an hour ago Exited (137) 29 seconds ago Python811
0a2ea514887e python:3.11 "python3" 20 hours ago Up 2 minutes Python3.11
[root@centos8 ~]#
删除容器“Python811”:(可以使用容器名称,也可以使用容器ID;要先停止对应容器)
[root@centos8 ~]# docker rm Python811
Python811
[root@centos8 ~]#
[root@centos8 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a2ea514887e python:3.11 "python3" 20 hours ago Up 4 minutes Python3.11
[root@centos8 ~]#
会连对应容器的存放目录也删除掉:
[root@centos8 ~]# cd /var/lib/docker/containers/
[root@centos8 containers]# ls
0a2ea514887e4221c7774ab06409743c03bf704a71d433eebdeab9a7b9410594
[root@centos8 containers]#
相关文章:
CentOS8安装Python3
CentOS8使用psutil+新浪邮箱使用465端口发送邮件
CentOS8_在Docker中安装Flask
CentOS8_在Docker中使用Nginx的反向代理
CentOS8_在Docker中安装MySQL
CentOS8_在Docker中安装MariaDB
CentOS8_在Docker中安装Tomcat+MariaDB
CentOS8_在Docker中限制容器可用的CPU个数和内存量 |