初识Docker
十号 2020-05-28 docker容器化部署
# Docker 是什么?
Docker 学习记录, 相关Docker资源
# 概念
- 一次封装,到处执行
- 基于Linux的高效、敏捷、轻量级的容器(轻量虚拟)方案
虚拟技术
- 完全虚拟化
VMware
Workstation
VirtualBox
- 硬件辅助虚拟化
InterVT
AMD-V
- 超虚拟化
Xen
- 操作系统级
Docker
LXC
容器
# 特点
- 高效利用系统资源
- 快速启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
# 对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般为几十个 |
# Docker 安装
# 前期准备
Ubuntu
docker镜像
阿里云系统的各个区别
# apt 升级
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
# 下载软件包的合法性,需要添加软件源的GPG密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# source.list 中添加 Docker 软件源
# 在软件源列表中没有Docker, 所以需要添加下
sudo add-pet-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce
# 脚本自动安装(不需要)
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 启动Docker CE
sudo systemctl enable docker
sudo systemctl start docker
# 建立docker用户组(附加)
sudo groupadd docker
sudo usermod -aG docker $USER
# Helloworld 测试
docker run hello-world
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
36
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
36
# 镜像加速
- Azure中国镜像 (opens new window)
- 阿里云加速器(需要登陆账号获取)
- 七牛云加速器 (opens new window)
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 简单Nginx 服务
# 拉取nginx官方镜像
# nginx 镜像是面向docker的只读模版
# 直接运行nginx, 如果没有, docker可以自动拉取, 所以拉取nginx 镜像这步操作可以省略
docker pull nginx
# 查看
docker images nginx
# 创建文件夹
mkdir www
# 查看当前目录(可以省略, 这步主要是看创建后的 www 文件夹)
ls
# 在www文件夹中写入index.html
echo 'hello docker!' >> www/index.html
# 查看刚刚写入的index.html内容(非必要,可以省略)
cat www/index.html
# 运行
# -p 标识会将容器的端口暴露给主机,这样可以通过访问实体机(服务器)的端口访问docker中运行的服务
# -p number:number 表示端口映射。
# 因为nginx 默认是80端口
# 所以 -p 8000:80 这句话意思是: 将实体机(服务器)的8000端口映射到docker下nginx 80端口
# docker -v 命令?
# $PWD/www 表示实体机(服务器)的目录
# $PWD/www:/usr/share/nginx/html 命令含义为:
# 将实体机下的www目录映射到nginx的html目录
# nginx 结尾表示使用镜像的名字
docker run -p 8000:80 -v $PWD/www:/usr/share/nginx/html nginx
# 上述步骤已经可以运行了, 浏览器访问http:ip地址:端口号
# 后台模式执行
# -d 标识可以让容器在 docker run 命令完成之后继续在后台运行
docker run -p 8000:80 -v $PWD/www:/usr/share/nginx/html -d nginx
# 查询docker下的运行进程
# 在liunx 系统下 ps 命令表示查看运行进程
docker ps
# 根据container id停止Nginx服务
# c99 表示CONTAINER ID 的前三位
docker stop c99
# 根据CONTAINER ID 运行Nginx服务
docker start c99
# 在docker下查询所有没有运行的服务
docker ps -a
# 进入docker虚拟机服务
docker exec -it c99 /bin/bash
# 退出
exit
# 删除c99服务
docker rm c99
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Docker 运行过程
镜像(Image)
面向Docker的只读模版
容器(Container)
镜像的运行实例
仓库(Registry)
存储镜像的服务器
# 定制镜像
镜像的定制实际上就是定制每一层所添加的配置、