docker 的好处
快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,
相比虚拟机大幅提高性能和效率。
节省开支:提高服务器利用率,降低 IT 支出。
简化配置:将运行环境打包保存至容器,使用时直接启动即可。
快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容
性可以方便将应用从 A 宿主机迁移到 

缺点是隔离性:各应用之间的隔离不如虚拟机彻底
安装docker
见官网

安装成功之后,docker 会有默认生成一个 docker0 的网卡,并且默认IP地址为 172.17.0.1 的网卡
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 命令,您可以将容器的当前状态保存为一个新的镜像,并通过使用该镜像创建新的容器来复现相同的环境。请注意,制作镜像时最好选择容器状态的一个稳定点,以便获得一致性和可重复性的结果。


12-13 07:55