Docker基础10分钟急救包:镜像/容器/挂载核心用法记录
Docker基础10分钟急救包:镜像/容器/挂载核心用法记录
Docker是现代软件开发中不可或缺的工具,它可以帮助开发者快速搭建和部署运行环境。本文从Docker的基础概念出发,详细介绍了Docker的安装、基本使用、数据卷挂载、网络配置等核心功能,适合Docker初学者快速上手。
前言
之前也用过一些docker,但是镜像都是其他部门做好打包了,我一直都是拿来主义,只会简单的启动,关闭容器,并没有过多的深究,导致一年之后再去使用Docker时,发现很多命令和使用手法出现混乱,以致于使用起来不是很顺手,借此机会系统性的记录下docker的常用命令用法和作用。
为什么用Docker
软件算法开发中,很多重复且技术含量不是很高的工作中其中必有“搭环境”,有的复杂的项目,环境搭建和调试可能需要一天。运气不好,在系统崩溃或者更换机器的情况下就需要重新搭建环境,要是有一个工具可以帮助我们解决环境只需要搭建一次,然后打包成一个文件,下次使用直接加载这个文件就好啦,因此Docker它来啦!
Docker 基础概念
在使用 Docker 之前,需要了解以下几个核心概念:
镜像(Image)
Docker 镜像类似于软件安装包,它包含了运行某个程序所需的环境和依赖。你可以从 Docker Hub 下载公共镜像,也可以自己构建镜像。
容器(Container)
容器是基于镜像运行的实例,类似于安装并运行的应用。容器是独立的,它不会影响宿主机和其他容器的运行。
仓库(Repository)
Docker 镜像存储在远程仓库,如 Docker Hub(官方公共仓库)或者私有仓库。你可以拉取(pull)或推送(push)镜像。
Docker安装(以ubutnu20.04为例子)
step1 检查本地是否存在docker
docker --version # 查看版本号 简单粗暴的了解本地是否安装docker
step2 更新安装工具并安装依赖
这一步确保系统的软件包是最新的,并安装 curl 等必要的工具。
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
step3 添加Docker官方GPG密钥
这样可以确保下载的 Docker 软件包是官方认证的。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
step4 添加Docker软件源
这样可以让 apt 从 Docker 官方源获取最新版本的软件包。
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
step5 安装Docker
安装完毕后,Docker 及其相关组件都会准备好。
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
step6 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
step7 验证 Docker 是否安装成功
docker --version # 有类似 Docker version 24.0.7, build 1234567 输出,表示安装成功
step8 允许非 root 用户使用 Docker(可选)
默认情况下,Docker 需要 sudo 才能运行。如果想让普通用户也能运行 Docker:
sudo usermod -aG docker $USER
newgrp docker
这样,你就可以不使用 sudo 直接运行 docker 命令了。
🚀至此,docker安装已经完成!
Docker使用
1、拉取镜像
获取一个基础镜像
docker pull ubuntu:20.04
2、 查看本地镜像
docker images # 输出本地存在镜像文件
3、 运行docker容器
docker run -it ubuntu:20.04 /bin/bash
- -it:交互模式运行容器
- ubuntu:20.04:基于这个镜像运行容器
- /bin/bash:进入容器的 bash 终端
docker run --rm -it ubuntu /bin/bash
该命令加上–rm 表明该方法启动的容器再停止退出后,容器随机删除,里面的任何修改都不会保存,不建议使用。
4、 退出并停止容器
exit
或者 ctrl + D
5、 查看运行中的容器
docker ps
6、查看所有容器(包括已停止的)
docker ps -a
7、 重新启动已经停止的容器
docker start 默认不会附加终端。如果你希望启动容器并附加到容器的标准输入和输出(进入容器的交互式模式),你可以使用 -i 参数,类似于 docker run -i。
docker start -i 容器ID/容器名
8、停止容器
docker stop 容器ID/容器名
9、进入已经开启的容器中
docker exec -it my_container /bin/bash
10、删除容器
docker rm 容器ID/容器名
- 删除容器后,对于容器的修改不会保存
11、删除镜像
docker rmi 镜像ID/镜像名
Docker容器如何能和宿主机文件数据共享呢?
docker容器是独立的,如果不指定共享文件夹,那么容器内部是无法获取宿主机的文件数据的,这样是不能和外接进行数据交互的,那么容器的作用也就不大了。
docker run -it -v /宿主机目录:/容器目录 ubuntu:20.04 /bin/bash
示例:
docker run -it -v ~/mydata:/data ubuntu:20.04 /bin/bash
这样,宿主机 ~/mydata 目录中的数据会体现到容器的 /data 目录中。
Docker容器的修改如何保存?
在启动命令中加入–rm命令,会使得在停止退出时删除容器,因此容器的修改会消失。下述方法可以保证容器的修改能够永久保存。
step1 启动容器并进行修改
首先,你需要启动一个容器并在容器中进行修改。例如,进入容器并安装一些新的软件包或编辑文件。
docker run -it --name my_container ubuntu:20.04
当在容器中进行一些环境依赖安装后,执行下述保存容器内容为一个新的镜像
step2 保存新的镜像
docker commit my_container my_new_image:latest
step3 查看新的镜像
docker images
step4 使用新的镜像创建新的容器
之后,使用这个新的镜像来启动新的容器:
docker run -it my_new_image:latest
这将启动一个新的容器,并且包含你在原始容器中所做的所有修改。
Docker私有镜像如何部署到另一台机器上?
上述所有的工作都是为了这一步!我们使用Docker的目的就是不想重复搭建环境,因此当上述我们完成适配自己算法环境的docker镜像后,于是就可以保存镜像文件到本地,后续移植到任何需要部署的。
docker save -o my_new_image.tar my_new_image:latest
- -o 选项指定输出的 .tar 文件的名称(例如:my_new_image.tar)。
- my_new_image:latest 是你要保存的镜像的名称和标签。
在目标机器上加载镜像文件
docker load -i /path/to/destination/my_new_image.tar
启动镜像
docker run -it my_new_image:latest
Docker容器如何能和宿主机共享网络ip?
docker容器是独立的,如果不指定共享宿主机网络,那么容器外部是无法通过远程获取容器内部数据的,解决不同容器之间的通讯问题,尤其针对ros系统的使用,如果不同容器不在同一个网段下是不可以通讯的。
docker run -it --network host ubuntu:20.04 /bin/bash
通过 --network host 实现容器网络共享宿主机器网络
至此,完成镜像的制作和部署🚀