文章目录
-
-
-
- docker 的好处
-
- 安装docker
- docker images
- images 导出与导出
- 删除镜像,指定端口启用
- 容器启停
-
- docker 的镜像制作之下载并安装好nginx
- docker 的镜像制作之提交镜像
docker 的好处
快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,
相比虚拟机大幅提高性能和效率。
节省开支:提高服务器利用率,降低 IT 支出。
简化配置:将运行环境打包保存至容器,使用时直接启动即可。
快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容
性可以方便将应用从 A 宿主机迁移到
缺点是隔离性:各应用之间的隔离不如虚拟机彻底
安装docker
见官网
安装成功之后,docker 会有默认生成一个 docker0 的网卡,并且默认IP地址为 172.17.0.1 的网卡
4: docker0: mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:fc:9a:1c:32 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:fcff:fe9a:1c32/64 scope link
valid_lft forever preferred_lft forever
1.dockerd 通过 grpc 和 containerd 模块通信(runc)交换,dockerd 和 containerd
通信的 socket 文件:/run/containerd/containerd.sock。
2. containerd 在 dockerd 启动时被启动,然后 containerd 启动 grpc 请求监听,
containerd 处理 grpc 请求,根据请求做相应动作。
/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
3. 若是创建容器,containerd 拉起一个 container-shim 容器进程 , 并进行相应
的创建操作。
4. container-shim 被拉起后,start/exec/create 拉起 runC 进程,通过 exit、control
文件和 containerd 通信,通过父子进程关系和 SIGCHLD(信号)监控容器中进程
状态。
5. 在整个容器生命周期中,containerd 通过 epoll 监控容器文件,监控容器事
件
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sameersbn/redmine latest cdbd133188e5 2 months ago 1.01GB
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符),默认为 latest
IMAGE ID #镜像唯一 ID 标示
CREATED #镜像创建时间
VIRTUAL SIZE #镜像的大小
images 导出与导出
docker save centos -o /opt/centos.tar.gz
docker save centos > /opt/centos-1.tar.gz
docker load < /opt/centos.tar.gz
删除镜像,指定端口启用
docker rmi centos
汇总
# docker load -i centos-latest.tar.xz #导入本地镜像
# docker save > /opt/centos.tar #centos #导出镜像
# docker rmi 镜像 ID/镜像名称 #删除指定 ID 的镜像,通过镜像启动容器的
时候镜像不能被删除,除非将容器全部关闭
# docker rm 容器 ID/容器名称 #删除容器
# docker rm 容器 ID/容器名-f #强制删除正在运行的容器
删除某个id
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1759d1b8abe postgres "docker-entrypoint.s…" 6 weeks ago Up 6 weeks 5432/tcp some-postgres
eae49555c864 sameersbn/postgresql "/sbin/entrypoint.sh" 6 weeks ago Up 6 weeks 5432/tcp postgresql-redmine
bdf5d162155e mysql "docker-entrypoint.s…" 6 weeks ago Up 6 weeks 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
2a296128cadc jenkins/jenkins:lts-jdk11 "/usr/bin/tini -- /u…" 4 months ago Up 4 months 50000/tcp, 0.0.0.0:8001->8080/tcp, :::8001->8080/tcp jenkins
docker rm -f f1759d1b8abe
f1759d1b8abe
[root@lightnode-wesley-test ~[]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eae49555c864 sameersbn/postgresql "/sbin/entrypoint.sh" 6 weeks ago Up 6 weeks 5432/tcp postgresql-redmine
bdf5d162155e mysql "docker-entrypoint.s…" 6 weeks ago Up 6 weeks 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
2a296128cadc jenkins/jenkins:lts-jdk11 "/usr/bin/tini -- /u…" 4 months ago Up 4 months 50000/tcp, 0.0.0.0:8001->8080/tcp, :::8001->8080/tcp jenkins
如果是端口映射的话,#随机端口映射,其实是默认从 32768 开始
指定则 -p
本地端口 81 映射到容器 80 端口
-p 81:80
容器启停
容器的启动和关闭:
[root@docker-server1 ~]# docker stop f821d0cd5a99
[root@docker-server1 ~]# docker start f821d0cd5a99
批量关闭正在运行的容器
[root@docker-server1 ~]# docker stop $(docker ps -a -q) #正常关闭所有运
行中的容器
[root@docker-server1 ~]# docker kill $(docker ps -a -q) #强制关闭所有运行
中的容器
[root@docker-server1 ~]# docker rm -f `docker ps -aq -f status=exited`
批量删除已退出容器
docker rm -f $(docker ps -a -q)
批量删除所有容器
docker 的镜像制作之下载并安装好nginx
[root@light-test etc[]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dokken/centos-7 latest 6524c258bb0e 9 hours ago 398MB
docker pull dokken/centos-7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache
#安装常用命令
yum install nginx –y
yum install -y vim wget pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
自定义web 页面
cat /usr/share/nginx/html/index.html
hello
演示效果: [root@648ef7329ad1 html]# curl 127.0.0.1/index1.html
hello world docker
docker 的镜像制作之提交镜像
[root@light-test ~[]# docker commit -m "nginx image" 648ef7329ad1 light/centos-nginxv1
sha256:0105b7ab4fb826b62fcb7847b20a37faf3c36e779d5023895f89f7157ab51835
[root@light-test ~[]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
648ef7329ad1 dokken/centos-7 "/bin/bash" 23 minutes ago Up 7 minutes wizardly_shockley
eae49555c864 sameersbn/postgresql "/sbin/entrypoint.sh" 6 weeks ago Up 6 weeks 5432/tcp postgresql-redmine
bdf5d162155e mysql "docker-entrypoint.s…" 6 weeks ago Up 6 weeks 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
2a296128cadc jenkins/jenkins:lts-jdk11 "/usr/bin/tini -- /u…" 4 months ago Up 4 months 50000/tcp, 0.0.0.0:8001->8080/tcp, :::8001->8080/tcp jenkins
[root@light-test ~[]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
light/centos-nginxv1 latest 0105b7ab4fb8 7 seconds ago 1.13GB
启用自己刚刚打好的镜像
使用 docker commit 命令可以将容器的当前状态保存为一个新的镜像。您可以随后使用该镜像来创建新的容器。下面是关于如何使用 docker commit 的一些指导步骤:
首先,确认您已经创建了一个容器并对其进行了一些修改或配置。
使用以下命令来查看当前正在运行的容器列表以及它们的标识信息(容器ID或容器名称):
docker ps
在输出结果中找到您要制作镜像的容器,并记录其容器ID或容器名称。
运行以下命令来创建新的镜像:
docker commit <容器ID或容器名称> <新镜像名称>
将 <容器ID或容器名称> 替换为您要制作镜像的容器的实际ID或名称。将 <新镜像名称> 替换为您想要为新镜像指定的名称。
例如,假设您的容器ID是 abcd1234,您想要将其制作为名为 myimage:latest 的新镜像,命令将如下所示:
docker commit abcd1234 myimage:latest
执行该命令后,Docker将保存容器的当前状态并创建一个新的镜像。
确认新镜像已经创建成功。您可以运行以下命令来列出已保存的镜像:
docker images
在输出结果中,您应该能够看到您刚刚创建的新镜像及其相关信息。
您可以使用新镜像创建一个新的容器,如下所示:
docker run -it <新镜像名称> <命令>
将 <新镜像名称> 替换为您刚刚制作的新镜像的名称。将 <命令> 替换为您想要在新容器内执行的命令。
例如,要使用刚刚制作的 myimage:latest 镜像创建一个新容器并执行 bash 命令,命令将如下所示:
docker run -it myimage:latest bash
这将创建一个新容器并启动一个交互式会话,您可以在其中执行命令。
通过使用 docker commit 命令,您可以将容器的当前状态保存为一个新的镜像,并通过使用该镜像创建新的容器来复现相同的环境。请注意,制作镜像时最好选择容器状态的一个稳定点,以便获得一致性和可重复性的结果。