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 
- 运行docker1 systemctl start docker 
- 安装工具1 apt-get -y install apt-transport-https ca-certificates curl software-properties-common 
- 重启docker1 service docker restart 
- 验证1 sudo docker run hello-world  
常见操作
镜像操作
- 搜索镜像1 
 2docker search + 镜像名 
 例:docker search centos #从docker hub中搜索docker名为centos的镜像
- 拉取镜像(需要梯子)不过使用pull经常需要梯子,否则就是自己使用支付宝账号去获取阿里云docker加速地址,并配置/etc/docker/daemon.json1 
 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


