Docker学习笔记(一)—认识与安装(Deepin15.11)

Docker学习笔记(一)—认识与安装(Deepin15.11)

三月 15, 2020 阅读量

Docker学习笔记(一)

认识与安装(Deepin15.11)

老早就知道Docker了,但是没有静下心来去看。终于简单的学习了一下,记一下笔记。但是篇幅有点多,分开写吧。

1.Docker介绍

Docker 是一个基于 Go 语言,开源的应用容器引擎。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互隔离,容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版免费) 和 EE(Enterprise Edition: 企业版收费)。
Docker 可以运行在Windows、Mac、Linux(CentOS,Ubuntu等)。
官方教程

2.Docker架构


镜像(Image):Docker 镜像,就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看作为一个代码控制中心,用来保存镜像。

客户端(client)通过Docker命令与主机(host)的守护进程(daemon)进行通信交互,来创建和管理镜像(images),容器(containers),网络(networks),卷(volumes),插件(plugins)等Docker对象。

3 安装Docker

不同操作系统方式略有不同,可以参考官方的安装教程。这里基于Deepin15.11(基于官网Debian安装)。
卸载旧版本 如果安装旧版本Docker先删除,未安装的话执行下面的命令会提示未安装。

1
sudo apt-get remove docker docker-engine docker.io containerd runc

这里使用推荐的仓库安装,更新apt包索引

1
sudo apt-get update

安装 apt 依赖包,用于通过 HTTPS 来获取仓库

1
2
3
4
5
6
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common

添加 Docker 的官方 GPG 密钥

1
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add –

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。

1
sudo apt-key fingerprint 0EBFCD88

设置稳定版仓库
1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"

这里Deepin可能会报could not find a distribution template for Deepin/stable的错误,需要修改Deepin.info文件的Suite,把unstable改成对应的stable(8jessie 7wheezy 6squeeze)

1
vim /usr/share/python-apt/templates/Deepin.info

但是更新apt包索引的时候发现仓库里Debian只到wheezy,没有stable

我这里修改stable为wheezy后,apt包索引更新成功

1
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable"
要把之前的添加的删除,不然会一直存在在/etc/apt/sources.list里,更新的时候会继续报错
1
2
3
4
sudo add-apt-repository -r \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"

安装社区版
更新 apt 包索引

1
sudo apt-get update

安装最新版本的 Docker Engine-Community 和 containerd

1
sudo apt-get install docker-ce docker-ce-cli containerd.io

验证是否正确安装了Docker(用docker -v来验证也可以)

1
sudo docker run hello-world

打印出以下信息则安装成功

配置Docker镜像加速器
Docker默认从Docker Hub上下载Docker镜像,拉取有时会有问题,一般都会配置镜像加速器。各大云都有提供加速器,其他像中科大镜像加速器https://docker.mirrors.ustc.edu.cn/也是可以的。这里使用阿里云的镜像加速器,一般地址为[系统分配前缀].mirror.aliyuncs.com,每个阿里账号对应不同的镜像加速器。首先登陆阿里云,进入容器镜像服务。然后进入镜像加速器菜单,里面有账号对应的加速器地址,并附有各个系统的操作文档,直接复制粘贴过来并回车就行,比如Deepin的参考Ubuntu(基于Debian)的。

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://whjf6e0c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

可以通过cat /etc/docker/daemon.json来查看文件是否写入成功。

4 Docker命令

这里简单写一下部分命令,具体命令写法参数等可以查询官方Docker Command

1
2
3
4
5
6
7
8
9
10
查看服务状态(active:active (running)运行中,inactive (dead)停止)
systemctl status docker
启动/停止/重启服务
systemctl [start|stop|restart] docker
查看服务是否是开机自动启动(Docker装完默认开机启动)
systemctl is-enabled docker
设置/禁止服务开机自动启动
systemctl [enable|disable] docker
查看所有服务的开机自动启动与禁用情况
systemctl list-unit-files

docker命令需要管理员权限
查看镜像

1
docker images

REPOSITORY仓库名 TAG版本

从仓库搜索镜像

1
2
docker search [镜像名]
docker search mysql

OFFICIAL 带[OK]为官方镜像

拉取镜像
不写版本号为最新版本latest,版本号从Docker Hub上查找

同一行tags是一样的,比如mysql的latest和8是同一个,拉取下来IMAGE ID是一样的

1
2
docker pull mysql
docker pull mysql:8

删除镜像
被容器使用的镜像无法删除,IMAGE ID有多个一样的无法通过IMAGE ID来删除,可以-f强制删除(未尝试)。

1
2
3
docker rmi [IMAGE ID镜像id|REPOSITORY仓库名:TAG版本]
docker rmi fce289e99eb9
docker rmi mysql:latest

查看容器
COMMAND进入容器初始化的命令 STATUS UP运行,Exited停止

1
2
3
4
5
6
启动中的容器
docker ps
所有容器
docker ps -a
容器信息
docker inspect [容器名]

创建容器
一般参数i(交互模式运行容器,一直运行)和t(为容器重新分配一个伪输入终端)同时使用,创建后直接进入容器,exit退出后会停止。
-d 后台运行,退出容器不影响运行。-it交互式容器,-id守护式容器
--name 容器名字

1
2
docker run -it --name=c1 centos:8
docker run -id --name=c2 centos:8

进入容器
进入容器后退出,容器不会关闭

1
2
docker exec -it [容器名] [初始化命令]
docker exec -it c2 /bin/bash

exit 退出容器

启动/停止容器

1
docker [start|stop] [容器名]

删除容器

1
docker rm [容器ID|容器名]