docker使用教程
This is my study note of docker.
简介
什么是docker?
docker镜像类似一个集装箱,你可以把你需要完成的所有任务(即所有代码以及代码运行需要的环境)全部打包到这个集装箱内部。需要的时候直接开启这个
“集装箱”,在集装箱内部完成你的任务(即在打包好的环境里面运行你需要的代码)。docker就是管理这些docker镜像的码头,你可以使用docker进行导出、
载入、开启、关闭镜像等操作。什么场景需要docker?
当你需要在其他PC上或者其他嵌入式开发板上运行当前的工程时,往往需要为这个工程配置繁杂的环境,有些环境的配置还很可能出现问题,这种情况下,
可以在当前你的设备上将工程需要的环境打包为docker镜像,在目标设备上安装这个镜像,就可以在目标设备上直接运行你的项目了。docker解决的问题?
1.首先,如上述所述解决了项目的环境问题,即镜像中的环境与设备上的环境是隔离开的,我们只需要保证镜像是我们自己工程所依靠的镜像即可。
2.隔离,docker在启动的时候已经限制好使用的最大CPU硬盘,所以就算当前设备因为某些问题资源被吃满了,docker还是可以保证自己内部程序
运行不受影响,完成了隔离运行资源的操作。镜像和容器?
什么是镜像?
镜像是一个独立的、可执行的软件包,它包含了运行特定应用程序所需的所有内容,包括代码、运行时环境、库、依赖项等。镜像可以看作是一个只读模板,用于创建容器。
什么是容器?
容器其实就是基于镜像创建的一个运行实例,当创建一个容器时,Docker会根据镜像的定义,在其上添加一个可写层,用于存储容器运行过程中的修改。容器可以被看作是一个隔离的运行环境,其中应用程序可以在相对独立的环境中运行,不受宿主机环境的影响。
所以说,镜像是容器的基础,容器是镜像的实例。
安装
- 首先更新软件源
1
2sudo apt update
sudo apt upgrade - 安装docker依赖
1
apt-get install ca-certificates curl gnupg lsb-release
- 添加Docker官方GPG密钥
1
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
- 添加docker软件源
1
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 安装
1
apt-get install docker-ce docker-ce-cli containerd.io
- 配置用户组
(这个操作可选,一般安装完以后命令行可以直接用命令了,我是由于vscode的docker插件无法自动识别到镜像,所以才配置的)(注:重新登录才能使更改生效)1
sudo usermod -aG docker $USER
- 运行docker
1
systemctl start docker
- 安装工具
1
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
- 重启docker
1
service docker restart
- 验证
1
sudo docker run hello-world
常见操作
镜像操作
- 搜索镜像
1
2docker search + 镜像名
例:docker search centos #从docker hub中搜索docker名为centos的镜像 - 拉取镜像(需要梯子)不过使用pull经常需要梯子,否则就是自己使用支付宝账号去获取阿里云docker加速地址,并配置/etc/docker/daemon.json
1
2
3docker pull + 镜像名
例:docker pull centos
报错TLS handshake timeout是网络原因导致超时,尝试多pull几次,同时pull操作默认下载latest,即最新版。1
2
3
4
5
6{
"registry-mirrors": ["加速地址"]
}
systemctl daemon-reload #启动配置
systemctl restart docker #重启docker服务 - 查看镜像
1
docker images # 查看已有镜像
- 查看镜像的详细信息
1
2docker inspect + IMAGE ID
查看指定ID的镜像信息 - 载入镜像(推荐)
1
2如果由于网络问题,pull不下来,可以去载其他人分享的镜像,使用load操作载入
docker load -i + 镜像地址 - 删除镜像
1
docker rmi 镜像名[标签] # 删除镜像
- 添加镜像标签
1
docker tag 旧[标签] 新[标签] # 旧标签重命名新标签
- 导出镜像
1
docker save -o 导出路径
容器操作
- 查看容器
1
docker ps
- 运行容器
1
docker run -itd 镜像名[标签] /bin/bash
- 查看命令信息
1
docker command --help # 查看命令具体的信息
- 创建容器
1
docker create -it 镜像名 /bin/bash
- 启动容器
1
docker start 容器ID/名称
- 停止容器
1
docker stop 容器ID/名称
- 删除容器
1
docker rm 容器ID/名称
- 进入容器
1
docker exec -it id号/名称 /bin/bash
- 容器导出
1
2
3docker export 容器ID/名称 > 文件名
例如:
docker export 2592d3fad0fb > nginxtar - 宿主机与容器文件复制
1
2
3
4docker cp 文件路径 容器id:目录
例:
docker cp ./text.txt 38b5218ca96f:/opt
将text.txt文件复制到容器内部的/opt下
使用范例
①pull或load镜像
1
1.pull镜像
1
2.load镜像
②查看镜像ID
1
可以看到镜像ID为ba6acccedd29
③开启容器
1 | 使用run命令开启镜像后,一定要使用docker ps查看镜像开启没有,同时记住“CONTAINER ID”,用于进入容器 |
- ④进入容器
1 | 此时可以看到。我们已经用root权限进入镜像中,后续就可以自己使用了,退出镜像则使用exit就可退出。 |
修改默认根目录
由于docker默认的安装目录是根文件夹下,因此很容易将我们的根文件夹内存占用满,我们可以采用以下方法将安装目录移动至指定目录下。
- 首先,关闭docker服务
1
service stop docker
- 其次,将docker 安装目录移动到指定目录下
1
2
3
4
5
6
7
81.docker 主要目录在 /var/lib/docker
(建议是最好先复制一份,以防操作失误:cp -rip /var/lib/docker /var/lib/docker_bac)
2.将文件移动到你指定的文件夹
mv /var/lib/docker /legrand/software
3.创建软连接
ln -s 新docker文件夹 旧docker文件夹(/var/lib/docker)
4.重启docker测试
service docker start