Docker - 指南

一、docker 介绍

1.1 引言

  1. 环境不一致

    “我本地运行没问题啊?!”

  2. 多用户相互影响

    “哪个哥们又写死循环了,怎么这么卡?!”

  3. 运维成本高

    “淘宝双十一用户量暴增”

  4. 软件安装成本高

    “学习一门技术,学习安装成本过高”

1.2 由来

一群年轻人创业,开了一家公司

  • 2010年,专门做 PAAS 平台
  • 2013年,因为亚马逊、微软、谷歌都开始做 PAAS 平台,便将公司核心技术(docker)对外开源
  • 2014年,获得 C 轮融资,$4000W
  • 2015年,获得 D 轮融资,$9500W

全神贯注维护 docker

创始人:所罗门,已经离开维护团队

1.3 思想

  • 仓库(Repository):超级码头,存放集装箱
  • 镜像(Image):集装箱
  • 容器(Container):运行起来的镜像
  1. 集装箱

    将所有需要的内容放到不同的集装箱中,需要什么环境取相应的集装箱即可

  2. 标准化

    1. 运输标准化

      docker 有一个码头,所有上传集装箱都放在了这个码头上,当需要某个环境时,就去这个码头搬运相应集装箱

    2. 命令标准化

      docker 提供一系列命令,帮助我们去操作集装箱

    3. REST API:

      衍生出很多的图形化界面,Rancher

  3. 隔离性

    docker 在集装箱运行时,会在 Linux 内核中单独开辟一块空间,这片空间不会影响其他程序

二、docker 基本操作

2.1 安装

2.1.1 普通安装

2.1.1.1 下载 docker 依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
2.1.1.2 设置下载 docker 的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.1.1.3 安装 docker
yum makecache fast
yum -y install docker-ce

2.1.2 自动化安装脚本

# 在测试或开发环境中 docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装
# 执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 docker CE 的 Edge 版本安装在系统中。
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

2.1.3 docker 设置开机自启与启动 docker

2.1.3.1 设置开机自启
systemctl enable docker
2.1.3.2 启动 docker
systemctl start docker
2.1.3.3 查看版本,测试是否安装成功
docker version

2.1.4 docker 建立 docker 用户组

2.1.4.1 建立 docker 组
sudo groupadd docker
2.1.4.2 将当前用户加入 docker 组
sudo usermod -aG docker $USER

2.1.5 docker 镜像加速

# 适用于 Ubuntu 16+、Debian 8+、CentOS 7+ 等使用 systemd 的系统
# 在 /etc/docker/daemon.json 中写入如下内容:
{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

2.2 docker 中央仓库

2.2.1 官方的中央仓库:

https://hub.docker.com

2.2.2 国内的镜像:

网易云:https://c.163.com/hub#/home

阿里云:https://cr.console.aliyun.com

daoCloud:https://hub.daocloud.io (推荐使用)

2.2.3 私服的镜像:

# 公司内部会采取私服的方式拉取镜像(添加配置)
# 需要在 /etc/docker/daemon.json 配置
{
	"registry-mirrors": ["https://registry.docker-cn.com"],
	"insecure-registries": ["ip:port"]	# 公司内部 docker 私服的 IP 和 PORT
}
# 重启两个服务
systemctl daemon-reload
systemctl restart docker

2.3 镜像操作

2.3.1 拉取镜像

docker pull mirrorname[:tag]	# tag:版本
# 举几个栗子
docker pull nginx								# 官方
docker pull hub.c.163.com/public/nginx:1.2.1	# 网易蜂巢
docker pull daocloud.io/library/nginx:1.13.1	# daoCloud

2.3.2 查看本地镜像

docker images
[root@VM-8-7-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              bc9a0695f571        36 hours ago        133MB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

2.3.3 删除本地镜像

docker rmi (IMAGEID)

2.3.4 镜像导入导出(不推荐)

# 导出本地镜像
docker save -o (path) (IMAGEID)
# 加载本地镜像
docker load -i (path/filename)
# 修改镜像名称
docker tag (IMAGEID) (REPOSITORY):(TAG)
# 结果
[root@VM-8-7-centos ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
hello-world                 latest              bf756fb1ae65        10 months ago       13.3kB
daocloud.io/library/nginx   1.13.1              c246cd3dd41d        3 years ago         107MB
[root@VM-8-7-centos ~]# docker save -o ./nginx.image c2
[root@VM-8-7-centos ~]# ll
total 108564
-rw------- 1 root root 111168512 Nov 26 21:03 nginx.image
[root@VM-8-7-centos ~]# docker rmi c2
Untagged: daocloud.io/library/nginx:1.13.1
Untagged: daocloud.io/library/nginx@sha256:83103ab203c0fdbb82d05966342d825ae37cb3f39d2594a353d8487f12cd3d71
Deleted: sha256:c246cd3dd41d35f9deda43609cdeaa9aaf04d3658f9c5e38aad25c4ea5efee10
Deleted: sha256:faff6e89a68845db6912629dd8b5647545f9198c5e312327a853508f25398c4d
Deleted: sha256:17634c028290a76bf93f15b178f7534cca4a38aede119fa760e319019a7bf9c7
Deleted: sha256:54522c622682789028c72c5ba0b081d42a962b406cbc1eb35f3175c646ebf4dc
[root@VM-8-7-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
[root@VM-8-7-centos ~]# docker load -i nginx.image
54522c622682: Loading layer  58.44MB/58.44MB
1c3fae42c500: Loading layer   52.7MB/52.7MB
87823f21b793: Loading layer  3.584kB/3.584kB
Loaded image ID: sha256:c246cd3dd41d35f9deda43609cdeaa9aaf04d3658f9c5e38aad25c4ea5efee10
[root@VM-8-7-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
<none>              <none>              c246cd3dd41d        3 years ago         107MB
[root@VM-8-7-centos ~]# docker tag c2 nginx:1.13.1
[root@VM-8-7-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
nginx               1.13.1              c246cd3dd41d        3 years ago         107MB

2.4 容器操作

2.4.1 运行容器

# 简单操作
docker run (IMAGEID)|(REPOSITORY)[:TAG]
# 常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 (IMAGEID)|(REPOSITORY)[:TAG]
# -d:后台运行容器
# -p 宿主机端口:容器端口:为了映射当前 Linux 端口和容器的端口
# --name 容器名称:指定容器名称
# 结果
[root@VM-8-7-centos ~]# docker run -d -p 8080:8080 --name nginx c2
28e945812a31d0fa7803bdcf82c46c094fddc5e3dfe55ddee84a95e03086141f

2.4.2 查看容器

docker ps [-qa] # 查看运行容器
# -a:查看全部容器,包括没有运行的
# -q:只查看容器的标识

2.4.3 查看容器日志

docker logs -f 容器id
# -f 日志的最后几行

2.4.4 进入容器内部

docker exec -it 容器id bash # 进入
exit # 退出
# 结果
[root@VM-8-7-centos ~]# docker exec -it f5 bash
root@f553fb65d5ff:/# exit
exit
[root@VM-8-7-centos ~]# 

2.4.5 停止容器

# 停止指定容器
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)

2.4.6 启动容器

docker start 容器id

2.4.7 删除容器(需先停止容器)

# 删除指定容器
docker rm 容器id
# 删除全部容器
docker rm $(docker ps -qa)
posted @ 2020-11-27 10:28  Icaurs  阅读(164)  评论(0)    收藏  举报