1、镜像管理命令
docker images
[root@docker-0001 ~]
docker search 镜像名称
[root@docker-0001 ~]
docker pull 镜像名称:标签
[root@docker-0001 ~]
docker save 镜像名称:标签 -o 备份镜像名称.tar
[root@docker-0001 ~]
docker load -i 备份镜像名称
[root@docker-0001 ~]
[root@docker-0002 ~]
docker rmi 镜像名称:标签
[root@docker-0002 ~]
docker history 镜像名称:标签
[root@docker-0001 ~]
docker inspect 镜像名称:标签
[root@docker-0001 ~]
[root@docker-0001 ~]
docker tag 镜像名称:标签 新的镜像名称:新的标签
[root@docker-0001 ~]
[root@docker-0001 ~]
拷贝教学环境镜像到docker-0001主机,并导入
[root@ecs-proxy ~]
[root@docker-0001 ~]
容器管理命令
启动容器
docker run 命令:docker run -参数 镜像名称:镜像标签 启动命令
docker-0001根据myos:v2009镜像启动并进入一个容器
[root@docker-0001 ~]
[root@89d1ec3a0dc8 /]
[root@docker-0001 ~]
启动容器时指定名字
[root@docker-0001 ~]
查看容器:docker ps [ -a 所有容器id ] [ -q 只显示容器 id ]
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0001 ~]
删除容器:docker rm 容器id
[root@docker-0001 ~]
删除正在使用的容器时,会报错,无法删除,需要先停止容器,再执行删除命令
[root@docker-0001 ~]
[root@docker-0001 ~]
删除所有的容器:支持命令行重录,前一个命令的结果可以作为后一个命令的参数
[root@docker-0001 ~]
临时启动容器 --rm,容器结束后自动删除,在内存中运行,退出后直接没有
第一个终端启动centos:7容器
[root@docker-0001 ~]
[root@e5f780c059f6 /]
第二个终端查看,可以看到结果
[root@docker-0001 ~]
回到第一个终端,退出容器
[root@e5f780c059f6 /]
在第二个终端查看,可以看到已经停止,但是容器还在,没有删除
[root@docker-0001 ~]
此时在第一个终端再次创建一个容器test2,加上--rm的选项查看结果
[root@docker-0001 ~]
第二个终端查看,可以看到结果
[root@docker-0001 ~]
回到第一个终端,退出容器
[root@e5f780c059f6 /]
在第二个终端查看,可以看到已经停止,但是容器已经没有
[root@docker-0001 ~]
容器管理命令启动、停止、重启
- [x] docker start 容器id
- [x] docker stop 容器id
- [x] docker restart 容器id
[root@docker-0001 ~]
[root@docker-0001 ~]
查看容器信息:docker inspect 容器id
[root@docker-0001 ~]
......
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
......
[root@docker-0001 ~]
Nginx is running !
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0001 ~]
拷贝文件
docker cp 本机文件路径 容器id:容器内路径(上传)
docker cp 容器id:容器内路径 本机文件路径(下载)
拷贝宿主机文件到容器
[root@docker-0001 ~]
[root@docker-0001 ~]
在刚刚启动的第一个容器终端中查看结果
[root@b6a1ab762bd5 /]
busybox.tar
拷贝容器内文件到宿主机
[root@docker-0001 ~]
[root@docker-0001 ~]
busybox.tar hosts myos.tar.xz
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0001 ~]
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>
[root@docker-0001 ~]
2023/06/11 12:45:32 [error] 7
但是如果apache的服务也是同样测试,可能结果就不显示,是因为软件原因
连接容器,启动新进程:docker exec -it 容器id 命令
[root@docker-0001 ~]
[root@164a7b1a6c57 /]
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@164a7b1a6c57 /]
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:49 pts/0 00:00:00 /bin/bash
root 42 0 0 12:50 pts/1 00:00:00 /bin/bash
root 63 42 0 12:50 pts/1 00:00:00 ps -ef
[root@164a7b1a6c57 /]
连接容器启动进程:docker attach 容器id
attach 以上帝进程的身份,进入容器内部,当执行exit退出容器时,会结束整个容器,通常用于在测试时,查看报错信息;
[root@docker-0001 ~]
[root@164a7b1a6c57 /]
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:49 pts/0 00:00:00 /bin/bash
root 64 1 0 12:52 pts/0 00:00:00 ps -ef
[root@164a7b1a6c57 /]
[root@docker-0001 ~]
[root@docker-0001 ~]
简单镜像制作
获取基础镜像
方法一:docker-0001主机备份centos:7镜像,拷贝到docker-0002导入
[root@docker-0001 ~]
[root@docker-0001 ~]
[root@docker-0002 ~]
方法二:docker-0002主机直接下载
[root@docker-0002 ~]
commit 自定义镜像
使用镜像启动容器,在该容器基础上修改,另存为一个新镜像
- [x] docker run -it centos:latest /bin/bash
- [x] 配置 yum,安装软件,系统配置
- [x] docker commit 容器id 新镜像名称: 新镜像标签
在docker-0001创建一个centos的容器
[root@docker-0002 ~]
[root@cb458c4e9ede /]
[root@cb458c4e9ede yum.repos.d]
[root@cb458c4e9ede yum.repos.d]
[root@cb458c4e9ede yum.repos.d]
[root@cb458c4e9ede yum.repos.d]
[root@cb458c4e9ede yum.repos.d]
commit 提交容器,生成新的镜像;mycentos为容器的名字
[root@docker-0002 ~]
[root@docker-0002 ~]
[root@docker-0002 ~]
使用 docker run 验证新的镜像
[root@docker-0002 ~]
[root@docker-0002 ~]
[root@aa14feea7b4e /]
[root@aa14feea7b4e /]
[root@aa14feea7b4e /]
容器内部署应用
删除之前所有的容器
[root@docker-0002 ~]
[root@docker-0002 ~]
此时就可以在容器里面安装相关的软件包
[root@e0e8f8596277 /]
[root@e0e8f8596277 /]
[root@e0e8f8596277 /]
[root@e0e8f8596277 /]
........
[Service]
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
[root@e0e8f8596277 /]
......
LANG=C
[root@e0e8f8596277 /]
[root@e0e8f8596277 /]
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
另外开一个docker-0002终端,通过提示的地址172.17.0.2
[root@docker-0002 ~]
hello world
此时容器内容的终端是被占用的,是在前台运行的,如果关闭,不能够再次访问httpd,若想要退出,使用ctrl + pq
[root@docker-0001 ~]
[root@e0e8f8596277 /]
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:17 pts/0 00:00:00 /bin/bash
root 27 1 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 28 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 29 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 30 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 31 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
apache 32 27 0 13:20 pts/0 00:00:00 /usr/sbin/httpd -D
root 54 0 0 13:27 pts/1 00:00:00 /bin/bash
root 76 54 0 13:27 pts/1 00:00:00 ps -ef
[root@e0e8f8596277 /]
补充
名称空间:
是指可以对系统资源空间进行分割隔离的技术,例如:创建一个虚拟机,在虚拟机里的所有操作,都不会对真实机造成影响。
名称空间分为六大类,可以从各个方面来对系统资源空间进行隔离;
UTS、NETWORK、MOUNT、USER、PID、IPC
UTS:
NETWORK:网络命名空间,作用:分割网络,即容器内的网络配置和宿主机之间相互不受干扰;
例如:
MOUNT:
例如:
USER:
PID:
例如:
IPC: