一、安装
- 1、卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io
- 2、更新apt包索引
sudo apt-get update
显示“正在读取软件包列表… 完成”
- 3、安装以下包以使apt可以通过HTTPS使用存储库(repository)
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
显示“done.”
- 4、添加Docker官方的GPG密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
显示“OK”
- 5、设置stable存储库
sudo add-apt-repository "deb [arch=amd64] Index of linux/ubuntu/ $(lsb_release -cs) stable"
如果没有报错就正常进行下一步。显示“正在读取软件包列表… 完成”
这里我报错
Command 'lsb_release' not found, but can be installed with:
sudo apt install lsb-release
E: 文件 list 第 73 行的记录格式有误 /etc/apt/sources.list (URI parse)
E: 无法读取源列表。
解决方法就是
(1)先删除刚刚加进去的语句
sudo gedit /etc/apt/sources.list
删掉73以及之后的句子(也就是刚刚我们加进去的)
(2)改为重新运行下列语句(根据版本选择自己的句子即可)
# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu (Ubuntu内核名称) stable"
# Ubuntu16.04对应xenial
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
# Ubuntu18.04对应bionic
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
# Ubuntu20.04对应focal
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
参考链接:Ubuntu安装docker报错:Command ‘lsb_release‘ not found
- 6、更新一下apt包索引
sudo apt-get update
显示“正在读取软件包列表… 完成”
- 7、安装最新版本的Docker CE
sudo apt-get install -y docker-ce
显示“正在处理用于 man-db (2.9.1-1) 的触发器 …
正在处理用于 systemd (245.4-4ubuntu3.17) 的触发器 …”
二、验证
- 查看docker服务是否启动
systemctl status docker
或者
service docker status
- 【可跳过】若未启动,则启动docker服务
systemctl start docker
# 或者
service docker start
三、配置镜像加速器
默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。
- 1、在阿里云注册账号–右上角进入控制台。
https://www.aliyun.com/
- 2、容器镜像服务
打开左上角菜单栏,搜索“容器镜像”,选择“容器镜像服务”
- 3、加速
打开左侧"镜像工具",选择"镜像加速器",在Ubuntu中依次运行最下方代码
(容器镜像服务)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如果写错了可以通过以下代码来修改或者查看
sudo gedit /etc/docker/daemon.json
四、镜像使用
1、镜像和容器的区别
-
镜像与容器为一对多的关系,通过一个镜像确实可以启动三个容器,但是这个三个容器的名字不能一样。
-
镜像是别人打包好在镜像仓库的,我们去下载就好了。但是我们下载镜像的时候要带上版本号。如ubuntu:20.04和ubuntu:18.04是两个不同的镜像。
-
镜像的基本属性包括REPOSITORY(仓库名)、TAG、IMAGE ID、CREATED(创建时间)、SIZE等。例如【ubuntu:20.04】的REPOSITORY = ubuntu,TAG = 20.04。
参考链接:
docker容器和镜像的区别
Docker容器与镜像的区别
2、Exit状态、运行、未运行
-
创建镜像时顺便创建的容器:exit后成为:exited状态=未运行状态
-
start之后的容器:运行状态。经过exit后,未成为exited状态,需要再经过stop,才可以成为未运行状态。
3、具体使用
简单了解了镜像和容器的区别,就可以开始创建镜像/容器了。
(1)创建镜像和容器
【在这步骤中可以输入“exit”来直接退出容器】
a. run命令
【ubuntu20.04:8ba1b8fe358d,不命名】
在ubuntu:20.04镜像下创建一个容器。如果没有发现镜像的话,会自动进行下载(Pull)。
sudo docker run -it ubuntu:20.04 /bin/bash
/bin/bash 参数告诉docker在容器中启动一个bash shell,即pull完会直接进入容器中,其中8ba1b8fe358d就是容器的编号。
【ubuntu20.04:892fed6bf971,名为myx_test】
–name可以实现为容器取名。
事实上,在ubuntu20的系统中,ubuntu:latest和ubuntu:20.04是同一个镜像,但由于TAG不同,会再次Pull,此时创建了ubuntu:latest镜像下下一个新的名为“myx_test”的容器,容器ID为892fed6bf971。
sudo docker run -it --name=myx_test ubuntu:latest
【ubuntu18.04:f36e76fb8d9a,名为myx_test2】
此时,如果改为ubuntu18.04,就要重新进行pull。此时创建了一个ID为f36e76fb8d9a的容器
sudo docker run -it --name=myx_test2 ubuntu:18.04
b. create命令
也可以用create命令新建镜像,但create完成后不会自动创建容器。由于此时已经存在latest,所以不会pull
sudo docker create -it ubuntu:latest
(2)查看镜像和容器
- 查看镜像
sudo docker images
根据之前的步骤,分别创建过ubuntu20.04、ubuntu:latest、ubuntu18.04三种镜像。
同时如之前所述,对于同版本的ubuntu镜像,其ID是相同的
- 查看容器
# 查看Exited状态的容器
sudo docker ps -a|grep Exited|awk '{print $1}'
从下至上依次是之前创建的三个容器
(3)容器进入退出和启动停止
-
若当前已经位于容器中:
-
退出时想继续运行容器:依次按【ctrl+p】,【ctrl+q】
-
退出时想停止运行容器:按【ctrl+d】或输入exit
-
-
若当前不在容器中:
# 启动,start后跟着id号,只要能唯一标志,可以不完整输入
# 也可以是之前定义的名称
sudo docker start id # sudo docker start 89
sudo docker start name # sudo docker start myx_test
# 停止
sudo docker stop id
sudo docker start name
其中,启动并不会进入bash界面,而是让容器运行,不再属于Exited状态。
- 容器已经启动,想要进入容器bash界面:
需要先通过sudo docker start
启动容器,才可以用以下代码进入
# 同样是使用id和name都可以,之后不再复述
sudo docker exec -i -t myx_test /bin/bash
sudo docker exec -i -t 89 /bin/bash
这里要注意的是,经过start的容器,仅仅“exit”无法让其处于Exited状态,需要再运行stop命令。
(4)删除镜像和容器
- 删除镜像
删除镜像ubuntu:latest
# 短id
sudo docker rmi ba6a
# 完整id
sudo docker rmi ba6acccedd29
# 镜像名【REPOSITORY:TAG】
sudo docker rmi ubuntu:latest
(2)删除容器
创建一个新的容器,id是d56bf84b9bbe,删除
# 删除某个具体容器
sudo docker rm id
# 删除Exited状态/未运行的容器,三种命令均可
sudo docker rm docker ps -a|grep Exited|awk '{print $1}'
sudo docker rm $(sudo docker ps -qf status=exited)
sudo docker rm $(sudo docker ps -a -q)
# 删除孤立容器
sudo docker container prune
参考链接
docker容器安装与使用