Docker 是什么
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。它属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。
虚拟机 与 Linux 容器
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统。虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件。
虚拟机的缺点:资源占用多、冗余步骤多、启动慢。
Linux 容器(Linux Containers,缩写为 LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。
容器的优势:启动快、资源占用少、体积小。
容器是进程级别的,有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
Docker 的用途
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
提供弹性的云服务。 Docker 容器可以随开随关,很适合动态扩容和缩容。
组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker的组成
- docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- Docker Container容器
通过客户端写命令,然后客户端将命令发送给守护进程,守护进程再将命令执行的结果返回给客户端,这就使我们能通过命令查看执行结果,镜像就是容器的源代码,容器通过镜像启动,使用仓库来保存用户构建的镜像,仓库分为共有和私有。
Docker的安装
不同的操作系统安装方式略有不同,请参考以下链接:
本机环境为Deepin 15.6,安装步骤如下:
必要步骤:
1. 如果以前安装过老版本,可以先卸载以前版本
sudo apt-get remove docker.io docker-engine
2. 安装docker-ce与密钥管理与下载相关的工具
说明: 这里主要是提供curl命令、add-apt-repository和密钥管理工具(software-properties-common包提供add-apt-repository工具)。
sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common
3. 下载并安装密钥
为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。
//中科大源
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
// 官方源,能否成功可能需要看运气。
// curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
4. 查看密钥是否安装成功
sudo apt-key fingerprint 0EBFCD88
如果安装成功,会出现如下内容:
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
5. 添加docker官方仓库
向 source.list 中添加 Docker CE 软件源
//中科大源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian stretch stable"
//官方源
// sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable"
6. 更新仓库
sudo apt-get update
7. 安装docker-ce
由于网络不稳定,可能会下载失败。如果下载失败了,可以多试几次或者找个合适的时间继续。
sudo apt-get install docker-ce
在安装完后启动报错,查看docker.service的unit文件,路径为/lib/systemd/system/docker.service,把ExecStart=/usr/bin/dockerd -H fd:// 修改为ExecStart=/usr/bin/dockerd,则可以正常启动docker,启动命令为 systemctl start docker。
8. 查看安装的版本信息
limeng@KID:~$ docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:17:14 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:15:24 2018
OS/Arch: linux/amd64
Experimental: false
9. 验证docker是否被正确安装并且能够正常使用
limeng@KID:~$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
如果能够正常下载,并能够正常执行,则说明docker正常安装。
可选步骤:
更换国内docker加速器
方式一:使用阿里云的docker加速器。
在阿里云申请一个账号,然后打开 专属链接 拷贝专属加速器地址。
修改daemon配置文件/etc/docker/daemon.json来使用加速器。
/*下面是4个命令,分别单独执行*/
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["刚刚拷贝的地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
方式二:使用docker-cn提供的镜像源
编辑/etc/docker/daemon.json文件,并输入docker-cn镜像源地址。
sudo nano /etc/docker/daemon.json
输入以下内容
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启docker服务
sudo service docker restart
让普通用户也可以使用docker
Docker 守候进程绑定的是一个 unix socket ,而不是TCP端口。这个套接字默认的属主是root,其他是用户可以使用sudo命令来访问这个套接字文件。因为这个原因,docker服务进程都是以root帐号的身份运行的。
为了避免每次运行docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到这个分组里面。当docker进程启动的时候,会设置该套接字可以被docker这个分组的用户读写。这样只要是在docker这个组里面的用户就可以直接执行docker命令了。
- 查看用户组中有没有docker组
sudo cat /etc/group | docker
- 如果没有则创建docker分组
sudo groupadd docker
- 将相应的用户添加到该分组
sudo gpasswd -a ${USER} docker
- 检查是否有效
sudo cat /etc/group | grep docker
当前用户为limeng,说明已经添加进去
docker:x:126:limeng,root
- 退出当前用户再重新登录 或 重启docker-daemon
sudo systemctl restart docker
- 确认可以直接运行docker命令
limeng@KID:~$ docker info
Containers: 6
Running: 0
Paused: 0
Stopped: 6
Images: 2
Server Version: 18.03.1-ce
......(不再列出)
这表明已经设置成功。
如果提示get ……dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限
sudo chmod a+rw /var/run/docker.sock
禁止开机自启
默认情况下Docker是开机自启的,如果我们想禁用开机自启,可以通过安装chkconfig命令来管理Deepin自启项
- 安装chkconfig
sudo apt-get install chkconfig
- 移除自启
sudo chkconfig --del docker
小结
与虚拟机相比,Docker 不仅具有启动快、资源占用少、体积小等优点,而且它可以提供诸多便利,越来越多的人选择 Docker 。这次只大体上了解一些关于 Docker 是什么的知识,并且把环境安装成功使之能够成功的跑起来,关于具体怎么使用 Docker 来提高生产力还需要不断的学习。
参考链接:
Docker Documentation
Docker - deepin Wiki
Docker 入门教程 - 阮一峰的网络日志
Docker 教程 | 菜鸟教程