docker
1.docker容器
[root@docker ~]# systemctl start docker
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
# 容器执行完就退出了
[root@docker ~]# docker run -it --name=a0 centos:latest echo "abc"
abc
# 没有正在运行的进程
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 容器已经创建了,但是是exiting状态
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba5a978343c1 centos:latest "echo abc" 34 seconds ago Exited (0) 33 seconds ago a0
21d6b0b5e067 centos:latest "/bin/bash" 19 hours ago Exited (255) 17 minutes ago c1
# 启动a0容器
[root@docker ~]# docker start a0
a0
# a0容器没有启动成功
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 删除容器
[root@docker ~]# docker rm a0
a0
[root@docker ~]# docker ps -all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 19 hours ago Exited (255) 26 minutes ago c1
[root@docker ~]# docker start c1
c1
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 19 hours ago Up 4 seconds c1
[root@docker ~]# docker attach c1
[root@21d6b0b5e067 /]#
# ctrl+p+q退出容器但不中断进程
[root@21d6b0b5e067 /]# curl localhostread escape sequence
# 进程一直在
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 19 hours ago Up 4 minutes c1
# 容器进程运行的时候删不掉
[root@docker ~]# docker rm c1
Error response from daemon: cannot remove container "/c1": container is running: stop the container before removing or force remove
# 帮助指令
docker --help
2.镜像打包
# 查看现有镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
# 将镜像保存为一个tar包
[root@docker ~]# docker save -o centos.tar centos:latest
# 打包镜像成功
[root@docker ~]# ls
anaconda-ks.cfg centos.tar
3.删除镜像
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 20 hours ago Exited (0) 8 seconds ago c1
62dd0916fd92 centos:latest "/bin/bash" 20 hours ago Exited (127) 20 hours ago c0
# 如果有这个镜像生成的容器,就无法移除镜像
[root@docker ~]# docker rmi centos:latest
Error response from daemon: conflict: unable to remove repository reference "centos:latest" (must force) - container 62dd0916fd92 is using its referenced image 5d0da3dc9764
4.删除容器
# 删除容器,要退出容器up状态、
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 20 hours ago Up 44 minutes c1
[root@docker ~]# docker attach c1
[root@21d6b0b5e067 /]# exit
exit
# 使用docker ps --all确定没有镜像
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d6b0b5e067 centos:latest "/bin/bash" 20 hours ago Exited (0) 6 minutes ago c1
62dd0916fd92 centos:latest "/bin/bash" 20 hours ago Exited (127) 20 hours ago c0
[root@docker ~]# docker rm c1
c1
[root@docker ~]# docker rm c0
c0
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5.成功删除镜像
[root@docker ~]# docker rmi centos:latest
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
6.上传镜像
[root@docker ~]# ls
anaconda-ks.cfg centos.tar
[root@docker ~]# docker load -i centos.tar
74ddd0ec08fa: Loading layer 238.6MB/238.6MB
Loaded image: centos:latest
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
7.打包配置好阿里云镜像的容器
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker run -it --name c0 centos:latest /bin/bash
[root@db931a8ef3c8 /]# cd /etc/yum.repos.d/
[root@db931a8ef3c8 yum.repos.d]# ls
CentOS-Linux-AppStream.repo CentOS-Linux-FastTrack.repo
CentOS-Linux-BaseOS.repo CentOS-Linux-HighAvailability.repo
CentOS-Linux-ContinuousRelease.repo CentOS-Linux-Media.repo
CentOS-Linux-Debuginfo.repo CentOS-Linux-Plus.repo
CentOS-Linux-Devel.repo CentOS-Linux-PowerTools.repo
CentOS-Linux-Extras.repo CentOS-Linux-Sources.repo
[root@db931a8ef3c8 yum.repos.d]# cd
[root@db931a8ef3c8 ~]# rm -rf /etc/yum.repos.d/*
[root@db931a8ef3c8 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:01:06 --:--:-- 0^C
[root@db931a8ef3c8 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2495 100 2495 0 0 411 0 0:00:06 0:00:06 --:--:-- 520
[root@db931a8ef3c8 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo
[root@db931a8ef3c8 ~]# yum clean all && yum makecache
Failed to set locale, defaulting to C.UTF-8
0 files removed
Failed to set locale, defaulting to C.UTF-8
CentOS-8.5.2111 - Base - mirrors.aliyun.com 157 kB/s | 4.6 MB 00:29
CentOS-8.5.2111 - Extras - mirrors.aliyun.com 7.4 kB/s | 10 kB 00:01
CentOS-8.5.2111 - AppStream - mirrors.aliyun.com 140 kB/s | 8.4 MB 01:01
Metadata cache created.
[root@db931a8ef3c8 ~]# yum -y install epel-release
[root@db931a8ef3c8 ~]# # [root@docker ~]#
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db931a8ef3c8 centos:latest "/bin/bash" 31 minutes ago Up 30 minutes c0
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db931a8ef3c8 centos:latest "/bin/bash" 31 minutes ago Up 31 minutes c0
# 从容器导出tar包
[root@docker ~]# docker export -o centos_yum.tar c0
[root@docker ~]# ls
anaconda-ks.cfg centos.tar centos_yum.tar
8.将带有阿里云镜像的容器的tar包导入成镜像
[root@docker ~]# ls
anaconda-ks.cfg centos.tar centos_yum.tar
# 导入镜像
[root@docker ~]# docker import -m yum centos_yum.tar centos:yum
sha256:d79f0f2ff79e8b04b1eab2167c84d1723721af8139d92961de6bd66024487779
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos yum d79f0f2ff79e 20 seconds ago 260MB
centos latest 5d0da3dc9764 2 years ago 231MB
9.将配置好httpd服务的容器打包成镜像
[root@docker ~]# docker stop c0
c0
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db931a8ef3c8 centos:latest "/bin/bash" 45 minutes ago Exited (0) 8 seconds ago c0
[root@docker ~]# docker rm c0
c0
[root@docker ~]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker run -it --name c0 centos:yum /bin/bash
[root@9a56387c522c /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@9a56387c522c /]# ls /etc/yum.repos.d/
CentOS-Base.repo epel-playground.repo epel-testing.repo
epel-modular.repo epel-testing-modular.repo epel.repo
[root@9a56387c522c /]# yum -y install httpd
[root@9a56387c522c /]# yum -y install net-tools
[root@9a56387c522c /]# yum list installed|grep httpd
Failed to set locale, defaulting to C.UTF-8
centos-logos-httpd.noarch 85.8-2.el8 @base
httpd.x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 @AppStream
httpd-filesystem.noarch 2.4.37-43.module_el8.5.0+1022+b541f3b1 @AppStream
httpd-tools.x86_64 2.4.37-43.module_el8.5.0+1022+b541f3b1 @AppStream
[root@9a56387c522c /]# echo "docker_httpd_server" > /var/www/html/index.html
[root@9a56387c522c /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[root@9a56387c522c /]# curl localhost
docker_httpd_server
[root@9a56387c522c /]# [root@docker ~]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a56387c522c centos:yum "/bin/bash" 5 minutes ago Up 5 minutes c0
[root@docker ~]# docker export -o yum_httpd.tar c0
[root@docker ~]# ls
anaconda-ks.cfg centos.tar centos_yum.tar yum_httpd.tar
[root@docker ~]# docker import -m httpd yum_httpd.tar centos:httpd
sha256:92dfb2054854eb00daf758c5c571dd89b458564afdf4039cc441f95d3aca64b9
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 92dfb2054854 11 seconds ago 310MB
centos yum d79f0f2ff79e 15 minutes ago 260MB
centos latest 5d0da3dc9764 2 years ago 231MB
10.使用配置好httpd环境的容器(打包成镜像)创建一个容器
创建的容器里也有httpd服务
[root@docker ~]# docker run -it --name c2 centos:httpd /bin/bash
[root@f71014720c36 /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
[root@f71014720c36 /]# curl localhost
docker_httpd_server
[root@f71014720c36 /]# 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 8 bytes 648 (648.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
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 12 bytes 1011 (1011.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12 bytes 1011 (1011.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@f71014720c36 /]# [root@docker ~]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.208 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.138 ms
^C
--- 172.17.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.138/0.173/0.208/0.035 ms
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f71014720c36 centos:httpd "/bin/bash" 3 minutes ago Up 3 minutes c2
9a56387c522c centos:yum "/bin/bash" 3 hours ago Up 3 hours c0
[root@docker ~]# docker ps -all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f71014720c36 centos:httpd "/bin/bash" 3 minutes ago Up 3 minutes c2
[root@docker ~]# curl 172.17.0.3
docker_httpd_server
11.查看ip地址
(1)进入到容器,使用指令
[root@docker ~]# docker start c2
c2
[root@docker ~]# docker attach c2
[root@f71014720c36 /]# yum -y install net-tools,iprout
[root@f71014720c36 /]# ip a s
[root@f71014720c36 /]# ifconfigread escape sequence
[root@f71014720c36 /]# ifconfig
(2)使用docker指令·inspect
[root@docker ~]# docker inspect c2
(3)在外部调用指令
[root@docker ~]# docker exec c2 ifconfig
[root@docker ~]# docker exec c0 ip a
(4)联系测试 使用exec创建一个文件
[root@docker ~]# docker exec c2 touch /opt/test.txt
[root@docker ~]# docker exec c2 ls /opt
test.txt
12.端口映射
(1)指定端口映射
将容器中的80端口映射到宿主机(docker主机)80端口
[root@docker ~]# docker run -it --name c1 -p80:80/tcp centos:httpd /bin/bash
[root@7d2073518aef /]# curl 172.17.0.2
docker_httpd_server
[root@7d2073518aef /]# curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
[root@7d2073518aef /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
[root@7d2073518aef /]# curl localhost
docker_httpd_server
[root@docker ~]# docker run -it --name c4 -p12345:80 centos:httpd /bin/bash
[root@f1383acb6cb2 /]# curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
[root@f1383acb6cb2 /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[root@f1383acb6cb2 /]# curl localhost
docker_httpd_server
[root@f1383acb6cb2 /]# [root@docker ~]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1383acb6cb2 centos:httpd "/bin/bash" About a minute ago Up About a minute 0.0.0.0:12345->80/tcp, :::12345->80/tcp c4
(2).随机端口映射
[root@docker ~]# docker run -it --name c5 -p80 centos:httpd /bin/bash
[root@40f35d8764f6 /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
[root@40f35d8764f6 /]# curl localhost
docker_httpd_server
[root@40f35d8764f6 /]# [root@docker ~]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40f35d8764f6 centos:httpd "/bin/bash" 46 seconds ago Up 45 seconds 0.0.0.0:32768->80/tcp, :::32768->80/tcp c5
f1383acb6cb2 centos:httpd "/bin/bash" 4 minutes ago Up 4 minutes 0.0.0.0:12345->80/tcp, :::12345->80/tcp c4
(3)通过其他的ip地址的端口映射容器的端口
[root@docker ~]# ifconfig ens33:0 192.168.2.31 broadcast 192.168.2.31 netmask 255.255.255.255 up
[root@docker ~]# docker run -it --name c6 -p192.168.2.31::80 centos:httpd /bin/bash
[root@e6177cbb3400 /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message
[root@e6177cbb3400 /]# curl localhost
docker_httpd_server
[root@e6177cbb3400 /]# [root@docker ~]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6177cbb3400 centos:httpd "/bin/bash" 48 seconds ago Up 47 seconds 192.168.2.31:32769->80/tcp c6
40f35d8764f6 centos:httpd "/bin/bash" 7 minutes ago Up 7 minutes 0.0.0.0:32768->80/tcp, :::32768->80/tcp c5
f1383acb6cb2 centos:httpd "/bin/bash" 11 minutes ago Up 11 minutes 0.0.0.0:12345->80/tcp, :::12345->80/tcp c4
13.卷的映射
[root@docker ~]# mkdir /source
[root@docker ~]# ls /
bin dev home lib64 mnt proc run source sys usr
boot etc lib media opt root sbin srv tmp var
[root@docker ~]# docker run -it --name c3 -v /source:/data centos:httpd /bin/bash
[root@a41482a44fd1 /]# ls
bin dev home lib64 media opt root sbin sys usr
data etc lib lost+found mnt proc run srv tmp var
# ctrl +p +q 退出容器不中断容器的进程
[root@a41482a44fd1 /]# [root@docker ~]#
# 在宿主机器上的共享目录里创建文件
[root@docker ~]# touch /source/wangchuqin
# 宿主机中创建的文件会共享到容器的data目录中
[root@docker ~]# docker exec c3 ls /data
wangchuqin
14.总结:
1.镜像的迁移
(1).打包
docker save -o centos.tar centos:latest
(2).加载
docker load -i centos.tar
docker images
(3).删除镜像
docker rmi centos:latest
2.创建镜像
(1).创建容器
docker run -it --name c0 centos:latest /bin/bash
(2).下载阿里云仓库
epel
ctrl p q
(3).容器打包
docker export -o centos_yum.tar c0
(4).引入镜像
docker import -m "update yum repo" centos_yum.tar centos:yum
docker image ls
3.ip网络
(1).交互式
docker start c0
docker attach c0
yum -y install iproute
ip a
(2).inspect
docker inspect c0
(3).exec
docker exec c0 yum -y install net-tools
docker exec c0 ifconfig
4.端口
(1).指定端口映射
docker run -it --name c0 -p70:80 centos:httpd /bin/bash
(2).随机端口映射
docker run -it --name c1 -p80 centos:httpd /bin/bash
(3).指定其他ip的端口映射
ifconfig ens33:0 192.168.2.71.51 broadcast 192.168.71.21 netmask 255.255.255.255 up
docker run -it --name c2 -p192.168.71.51::80 centos:httpd /bin/bash
5.持久化
挂载
docker run -it --name c3 -v /adc:/def centos:httpd /bin/bash
touch /abc/aaa.txt
docker exec c3 ls /def