Docker基础入门

Docker基础入门

  • 我听说Docker的大名很久了,大一也尝试过Docker这项技术,但是一直都没有机型总结,也不经常使用,渐渐地之前的学会的内容就生疏了,那么就趁着这次机会,好好梳理一下吧。

0x00 Docker自学材料

  • 1.当然是官方文档啦。
  • 2.《第一本Docker书》最新版 这本书是Docker官方写的书,看完之后感觉是一本相当适合零基础入门的书。
  • 3.《Docker技术入门与实战 第2版》如果看过第二本的话,那么这本书就可以从后半本开始看起了,后面讲的主要是实践部分的内容,怎么在一个真正项目中使用Docker。

0x01 Docker到底是什么

虚拟化

  • 我们可能都听说过虚拟机(VMware, VMBOX等),那么Docker实际上就是依托于虚拟化技术的一项新的技术产物,又称作是容器。
  • 虚拟机依托的虚拟化技术更多的是表现在硬件上,即CPU提供虚拟化支持。而容器就轻盈得多,它依托的是Linux的一个实例,用Linux包裹住你的应用,形象地说,这就像是一个胶囊一样紧紧包裹住。
  • 容器仅仅是对操作系统内核进行了虚拟化处理,而不是对整个设备进行虚拟化处理。
  • Docker的虚拟化是进程级的虚拟化,可以说是“欺骗”了该进程,使之认为使用的资源都是独立的,因此相对于虚拟机来说更加轻量。

可移植性

  • 因为Docker是依托于Linux的LXC技术,因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源

局限

  • 1.Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
  • 2.LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
  • 3.隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
  • 4.网络管理相对简单,主要是基于namespace隔离
  • 5.cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
  • 6.Docker对disk的管理比较有限
  • 7.container随着用户进程的停止而销毁,container中的log等用户数据不便收集

0x02 Docker的安装

  • 安装这一步推荐是用Linux操作系统,因为上文提到过Docker是基于Linux的LXC技术而发展起来的
  • 由于现实原因Docker的镜像源国内访问异常的慢。因此推荐一个Docker源加速器DaoCloud
  • Docker官方是推荐添加第三方源的方式安装Docker-ce,而非是ubuntu等发行版官方收集的repo,docker.io。那么,带来的最直观的感受就是,在小带宽的服务器上,docker-ce的安装会异常缓慢。这里我还是直接安装docker.io的方式安装docker

安装步骤

以下内容Linux发行版为ubuntu
运行以下命令

1
2
sudo apt-get update
sudo apt-get install docker.io

安装完成后用以下命令确认

1
docker version

如果出现

1
“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”

这个错误,这说明Docker的守护进程没有正常运行
此时依次运行以下命令

1
2
3
4
sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker.service
sudo service docker start

再次确认docker状态

1
2
docker version
sudo service docker status

由于docker运行需要root权限,因此为了便于操作,将docker加入用户组

1
sudo usermod -aG docker $USER

0x03 Docker的使用

镜像(image)操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Usage: docker image COMMAND
Manage images
Options:
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.

容器(container)操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Usage: docker container COMMAND
Manage containers
Options:
Commands:
attach Attach local standard input, output, and error streams to a running container
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
exec Run a command in a running container
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers
logs Fetch the logs of a container
ls List containers
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
run Run a command in a new container
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
Run 'docker container COMMAND --help' for more information on a command.

0x04 小结

本文只是Docker的一个基本认知与使用,之后会再整理一篇Docker的多容器互联应用的的博文。