Docker自学文档
学前零星使用操作
一、基础镜像篇
二、基础容器篇
三、容器数据卷
四、DockerFile构建镜像
五、网络篇
六、Docker Compose
docker 在已经启动的容器中开启端口映射
ubuntu22.04使用docker-compose部署最美博客系统
本文档使用 MrDoc 发布
-
+
home page
学前零星使用操作
## 1、Centos7.x下安装Docker 安装环境:系统版本:Centos7.x,Docker 最新社区版 1、卸载旧版本的Docker ``` [root@localhost ~]# yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` 2、安装需要的依赖包 ``` [root@localhost ~]# yum install -y yum-utils ``` 3、设置镜像仓库 ``` ##国外的镜像仓库(非常慢) [root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ##国内的仓库地址(推荐使用阿里云的) [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` 更新yum软件包索引 ``` [root@localhost ~]# yum makecache fast ``` 4、安装Docker相关组件 ``` ##docker-ce表示社区版 docker-ce-cli表示社区版客户端 [root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ##如需安装其他版本,下面命令是显示所有版本 [root@localhost ~]# yum list docker-ce --showduplicates | sort -r ##下面命令是指定版本安装 [root@localhost ~]# yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin ``` 5、启动Docker,判断是否安装成功 ``` [root@localhost ~]# systemctl start docker #查看docker版本,使用该命令可以判断安装是否成功 [root@localhost ~]# docker version ``` 6、测试docker引擎 ``` [root@localhost ~]# docker run hello-world Unable to find image 'hello-world:latest' locally #没有寻找到该镜像 latest: Pulling from library/hello-world #远程拉去hello-world镜像 719385e32844: Pull complete Digest: sha256:926fac19d22aa2d60f1a276b66a20eb765fbeea2db5dbdaafeb456ad8ce81598 Status: Downloaded newer image for hello-world:latest #拉去的签名信息 Hello from Docker! #此信息开始至尾行代表你的第一个项目hello-world运行成功,至此docker安装成功 This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ ``` 7、查询下载的hello-world镜像 ``` [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 9c7a54a9a43c 2 months ago 13.3kB ``` 8、如何卸载Docker ``` #移除下载的Docker软件 [root@localhost ~]# yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras #删除docker的相关文件目录(环境、资源等) [root@localhost ~]# rm -rf /var/lib/docker [root@localhost ~]# rm -rf /var/lib/containerd ``` 9、配置阿里云镜像加速服务 ``` sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://a05jv9b5.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` 10、红帽8安装docker报错(与podman冲突),使用命令:yum erase podman buildah 解决。报错如下: ``` [root@localhost ~]# sudo yum install docker-ce docker-ce-cli containerd.io Docker CE Stable - x86_64 1.6 kB/s | 3.5 kB 00:02 Error: Problem 1: problem with installed package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 - package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed - package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - cannot install the best candidate for the job - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering Problem 2: problem with installed package podman-catatonit-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 - package podman-catatonit-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires podman = 3.0.1-6.module_el8.4.0+781+acf4c33b, but none of the providers can be installed - package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package docker-ce-3:20.10.7-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64 - cannot install the best candidate for the job - package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering - package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering - package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering - package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering - package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64 - package podman-catatonit-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires podman = 3.0.1-7.module_el8.4.0+830+8027e1c4, but none of the providers can be installed - package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed (try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) ``` ## 2、Docker run的运行及底层原理 1、Docker Run的运行流程图 ![](/media/202309/0.png) 2、底层原理 1、Docker是怎么工作的? Docker是一种开源的容器化平台,它可以让开发者将应用程序及其依赖项打包成一个独立的容器。Docker利用了Linux内核的容器化技术,通过在操作系统层面实现虚拟化,使得应用程序可以在相互隔离的容器中运行。下面是Docker的工作原理简述: (1)镜像(Image):Docker的基本单位是镜像,它包含了运行一个应用程序所需的所有文件和配置。镜像可以通过Dockerfile定义,其中指定了镜像的构建步骤和依赖关系。Docker可以从公共或私有的镜像仓库中下载已经构建好的镜像。 (2)容器(Container):镜像通过容器来运行。容器是镜像的运行实例,它是一个独立的、隔离的运行环境。每个容器都有自己的文件系统、进程空间和网络接口,但共享宿主机的操作系统内核。 (3)Docker引擎(Engine):Docker引擎是Docker的运行时环境,它包含了用于管理和运行容器的组件。Docker引擎可以在Linux、Windows和Mac OS上运行。 (4)Docker守护进程(Docker Daemon):Docker守护进程在宿主机上运行,负责管理镜像、容器和其他Docker对象。它接收来自Docker客户端的指令,创建、启动、停止和删除容器,并且与容器运行环境进行通信。 (5)Docker客户端(Docker Client):Docker客户端是与Docker守护进程进行交互的命令行工具或图形界面。开发者可以使用Docker客户端来管理镜像、容器和其他Docker对象,例如构建镜像、启动容器和查看日志等。 当开发者使用Docker命令操作时,Docker客户端会与Docker守护进程进行通信,将请求发送给守护进程。守护进程负责执行相应的操作,如从镜像构建容器、启动容器、暂停容器等。同时,守护进程会监控容器的运行状态,确保容器的隔离性和稳定性。 总结起来,Docker通过使用容器化技术,在不同的容器中运行应用程序,实现了应用程序的隔离、可移植和可伸缩运行。这样的容器化模型使得软件开发、测试和部署过程更加简单、高效和可靠。 ![](/media/202309/image-20230807145238991.png) 2、Docker为什么比VM快? (1)资源利用率:Docker容器共享宿主机的操作系统内核,而虚拟机需要在每个虚拟机中运行独立的操作系统,这会消耗更多的资源。由于容器与宿主机共享内核,Docker可以更有效地管理和利用系统资源,减少系统开销。 (2)启动时间:Docker容器几乎可以立即启动,因为它们只需加载应用和依赖的镜像,并启动必要的进程。相比之下,虚拟机需要启动独立的操作系统,因此需要更长的启动时间。 (3)管理和部署的简便性:Docker提供了与镜像和容器相关的便捷管理工具和API,使得管理、构建和部署变得更简单。相比之下,虚拟机需要管理和维护独立的操作系统,涉及到更多的复杂性和工作量。 (4)灵活性和可移植性:Docker容器可以在不同的主机上运行,而不受操作系统的限制。这使得容器可以轻松地迁移和部署到不同的环境中,而无需修改代码或配置。虚拟机则需要特定的虚拟化平台和配置。 (5)轻量级:Docker容器的镜像通常比虚拟机映像更小,因为它们只包含应用程序及其依赖的文件和库。这意味着在下载、存储和传输镜像时,对网络和磁盘资源的压力较小。 ![](/media/202309/image-20230807145300599.png) ## 3、其它小设置 ### 1、创建docker自定义网络 docker network create --subnet=172.18.0.0/16 【网络名称】 查看创建的自定义网络 docker network ls ### 2、设置容器开机自启 docker update --restart=always 【容器名称】 ### 3、创建一个固定ip地址的容器 docker run --name 【容器名称】 -d --network 【自定义网络名称】 --ip 【ip地址段】 -p 【映射端口】 【镜像名称】 例如: docker run --name nginx_01 -d --network mynetwork --ip 172.100.0.2 -p 80:80 centos7:nginx ### 4、复制宿主机文件至容器中 例如:将本地编写好的index.html文件复制到nginx容器中 docker cp /root/index.html nginx_02:/usr/local/nginx/html/index.html ### 5、进入容器 docker exec -it 【容器名称|ID】 bash ### 6、导入/出镜像命令 docker save 0fdf2b4c26d3 > hangge_server.tar #导出镜像(不带名称) ocker save -o redis.tar redis:5.0.2 #(按名字打包) docker load < hangge_server.tar #导入镜像 ### 7、设置镜像仓库 ``` #国外的镜像仓库(非常慢) [root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #国内的仓库地址(推荐使用阿里云的) [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` ### 8、配置阿里云镜像加速 ``` sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://a05jv9b5.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ``` ### 9、删除所有docker挂载的卷(匿名) ``` docker volume rm $(docker volume ls) ``` ## 4、小结 ![](/media/202309/image-20230816162525838.png) ![](/media/202309/image-20230807150931740.png)
admin
Oct. 19, 2023, 11:50 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
IT集中营导航
IT集中营导航
Markdown文件
share
link
type
password
Update password