Docker基础
Docker 是一种流行的开源容器化平台,用于打包、分发和运行应用程序及其依赖项。通过使用 Docker,开发者可以将应用程序及其所需的环境(操作系统、软件库等)打包为一个独立的容器,使其可以在不同的环境中运行。
以下是 Docker 的一些关键概念和功能:
-
容器:Docker 使用容器来封装应用程序及其依赖项。容器是一个独立、轻量级和可移植的运行环境,包含了应用程序的代码、运行时环境和系统工具。每个容器都是相互隔离的,可以独立运行,并且与宿主机和其他容器隔离开来,提供了安全性和可移植性。
-
镜像:Docker 镜像是容器的基础组件,是一个只读的文件,包含了完整的运行时环境和应用程序的代码。开发者可以根据自己的需求创建镜像,也可以从 Docker Hub 等镜像仓库获取已有的镜像。镜像是用于创建容器的模板,可以被共享和复用。
-
镜像仓库:镜像仓库是用于存储和分享 Docker 镜像的地方。其中最知名的是 Docker Hub,它是一个公共的镜像仓库,并提供了大量的官方和社区维护的镜像。除了 Docker Hub,还有其他私有和第三方的镜像仓库可供选择。
-
容器编排:Docker 提供了容器编排工具,如 Docker Compose 和 Kubernetes,用于管理和编排多个容器的运行。这些工具可以定义容器之间的关系、协作和扩展策略,简化了复杂应用程序的部署和管理。
-
跨平台性:Docker 可以在不同的操作系统和硬件平台上运行,包括 Linux、Windows 和 macOS。这使得开发者可以在开发环境中构建和测试容器,然后将其轻松地部署到生产环境中。
通过使用 Docker,开发者可以实现更加快速、高效和一致的应用程序交付和部署。Docker 的容器化方法可以降低开发和运维的成本,并提供更好的可伸缩性和可移植性,使得应用程序的部署和管理变得更加灵活和可靠。
一、 Docker安装
1.1 卸载旧版本(如果安装过旧版本的话)
1 yum remove docker docker-common docker-selinux docker-engine
1.2 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
1 yum install -y yum-utils device-mapper-persistent-data lvm2
1.3 设置yum源
1 #阿里镜像 2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 查看docker版本,选择安装的版本
yum list docker-ce --showduplicates | sort -r
1.5 安装docker
1 $ yum install docker-ce #由于repo中默认只开启stable仓库 2 $ yum install <FQPN> # 例如:yum install docker-ce-17.12.0.ce
如果安装失败,或者已经安装过了,可以暴力卸载
1 yum remove docker docker-common docker-selinux docker-engine -y 2 /etc/systemd -name '*docker*' -exec rm -f {} ; 3 find /etc/systemd -name '*docker*' -exec rm -f {} \; 4 find /lib/systemd -name '*docker*' -exec rm -f {} \;
1.6 启动docker
1 $ systemctl start docker 2 $ systemctl enable docker
=>Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
1.7 查看docker版本
1 docker -v
二、Docker镜像
2.1 查看镜像(所有镜像)
1 docker images
2.2 从源拉取镜像(
docker pull centos
如果出现异常
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
则配置镜像加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://[your mirrors].mirror.aliyuncs.com"]#你的阿里云加速地址 } EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如果还不行添加host解释
先找到ip
dig @114.114.114.114 registry-1.docker.io
配置其中一个IP地址
2.3 删除镜像
docker ps -a #运行过的容器 docker images # 查看镜像 docker rm id # 先删除容器
docker rmi image # 再删除镜像
三、Docker容器
容器是镜像的运行实例。当使用镜像创建容器时,Docker 会在镜像上创建一个可写的可执行环境,使得镜像能够运行为一个独立的进程。
3.1 创建/运行容器
1 docker run -d --name=demo 镜像名称 # 指定名称,运行完毕自动退出 2 docker run -it centos 交互式运行
每run一次都会创建一个新的容器
3.2 运行或停止现有容器
1 --启动和停止容器 2 docker start 容器ID 3 docker stop 容器ID
3.3 进入正在运行的容器
1 #docker exec [OPTIONS] CONTAINER_ID COMMAND [ARG...] 2 docker exec -it df5010c03ece /bin/bash
3.4 退出docker容器
1 exit
只是退出交互模式,但是容器还是正常运行,要停止容器,使用docker stop container_id
3.5 挂载
挂载(Mounting)是一种将宿主机的文件系统或目录与容器中的文件系统或目录进行连接的方法通过挂载,容器可以与宿主机或其他容器之间实现文件的共享和数据的持久化,方便实现跨容器或跨主机的数据交互和共享。
挂载分别有
-
宿主机目录挂载:将宿主机上的目录直接挂载到容器中。这样容器就可以访问宿主机上的文件系统,并进行读写操作。宿主机目录挂载可以通过
-v
或--volume
参数来实现,例如:1 docker run -v /host/path:/container/path image_name
-
匿名卷挂载:使用匿名卷(Anonymous Volume)进行挂载,即在容器创建时自动生成一个匿名卷,并将它挂载到容器的指定路径。匿名卷会存储在 Docker 主机的默认卷存储位置中。匿名卷挂载可以通过
-v
或--volume
参数来实现,例如:1 docker run -v /container/path image_name
-
命名卷挂载:可以通过命名卷(Named Volume)进行挂载,命名卷是用户显式创建的具有唯一名称的卷。它们可以用于容器间共享数据,并提供了更好的可维护性和可扩展性。命名卷挂载可以通过
--mount
参数来实现,例如:1 docker run --mount source=my_volume,target=/container/path image_name
-
共享卷挂载:通过与其他容器共享卷(Shared Volume)进行挂载,多个容器可以同时访问和修改这些卷中的数据。共享卷挂载可以通过
--volumes-from
参数来实现,例如:1 docker run --volumes-from container_name image_name
将mysql挂载到宿主机
1 #拉取mysql镜像 2 docker pull mysql:5.7 3 #将mysql挂载到宿主机的/usr/local/docker-mysql目录下 4 docker run -p 3307:3306 --name docker-mysql -v /usr/local/docker-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root.123 -d mysql:5.7 5 43ed051a5021b45e1e78c7f1f43a21c49bb473782093c1fde403bd7115f8d9c9
3307为宿主机的端口映射到docker的3306端口,-v可以配置多个文件挂载。挂载之后,即便删除了容器,但挂载的内容仍然在宿主机上,再次挂载相同的目录时,之前的内容依旧在。