系统学devops系列: docker入门学习操作篇

1.docker 入门安装

1.1 ubuntu系统安装docker-ce

ubuntu下安装docker-ce

1.2 centos系统安装docker-ce

1.2.1.移除旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

1.2.2.安装依赖软件包

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

1.2.3.添加软件仓库

我们这里使用稳定版 Docker,执行下面命令添加 yum 仓库地址:
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

1.2.4.安装docker

yum install docker-ce

1.2.5 指定安装版本安装

yum list docker-ce --showduplicates | sort -r
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

1.3 通过阿里云自动脚本安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

1.4 安装后的一些操作

1.4.1 普通用户操作docker

usermod -aG docker your-user

1.4.2 启动 Docker

systemctl enable docker
systemctl start docker

1.4.3 安装版本系统查看

[root@node01 ~]# docker version
Client:
 Version:           18.09.1
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        4c52b90
 Built:             Wed Jan  9 19:35:01 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       4c52b90
  Built:            Wed Jan  9 19:06:30 2019
  OS/Arch:          linux/amd64
  Experimental:     false

1.4.4 配置Docker加速器

vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
重启docker
systemctl daemon-reload
systemctl restart docker

验证加速配置是否加载
[root@node01 ~]# docker info |grep -A 3 "Registry Mirrors"

Registry Mirrors:
 https://registry.docker-cn.com/
 http://hub-mirror.c.163.com/

1.4.5 一些国内外的镜像地址

国内镜像地址

docker官网中国区镜像
--registry-mirror=https://registry.docker-cn.com
网易163 docker镜像 未使用,请自行判断
--registry-mirror=http://hub-mirror.c.163.com
USTC镜像加速
--registry-mirror=https://docker.mirrors.ustc.edu.cn
daocloud镜像 需注册
--registry-mirror=http://{your_id}.m.daocloud.io
alicloud 注册后有自己的加速地址
--registry-mirror=https://{your_id}.mirror.aliyuncs.com

1.5 卸载docker-ce

yum remove docker-ce
rm -rf /var/lib/docker

2.镜像管理

2.1 镜像的理论

Docker 的镜像是分层存储,每一个镜像都是由很多层,很多个文件组成。好处是共享资源。 多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享

用户不需要关心容器最终会在哪里运行,因为哪里都可以运行。
开发人员可以在笔记本上构建镜像并上传到 Registry,然后 QA 人员将镜像下载到物理或虚拟机做测试,最终容器会部署到生产环境。
使用 Docker 以及容器技术,我们可以快速构建一个应用服务器、一个消息中间件、一个数据库、一个持续集成环境。因为 Docker Hub 上有我们能想到的几乎所有的镜像。
镜像和容器的关系:
一个镜像可以创建多个容器。
镜像是增量式存储。
创建的容器里面修改不会影响到镜像。
docker commit 可以将容器提交成新的镜像。即Docker 支持通过扩展现有镜像,创建新的镜像。
容器只能使用Host的kernel,并且不能修改。

2.2 容器Copy-on-Write特性

新数据会直接存放在最上面的容器层。
修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中,镜像层保持不变。
如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件。

2.3 可写的容器层

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
典型的Linux在启动后,首先将 rootfs 置为 readonly, 进行一系列检查, 然后将其切换为 “readwrite” 供用户使用。在docker中,起初也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的将一个 readwrite 文件系统挂载在 readonly 的rootfs之上,并且允许再次将下层的 file system设定为readonly 并且向上叠加, 这样一组readonly和一个writeable的结构构成一个container的运行目录, 每一个被称作一个Layer。
所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
在容器层中,用户看到的是一个叠加之后的文件系统。
容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

2.4 管理镜像常用命令

ls       列出镜像
build    构建镜像来自dockerfinle
history  查看镜像历史
inspect  显示一个或多个镜像详细信息
pull    从镜像仓库拉取镜像
push    推送一个镜像到镜像仓库
rm      移除一个或者多个镜像
prune   移除未使用的镜像
tag     创建一个引用源镜像标记目标镜像 
export  导出容器文件系统到tar归档文件 
import  导入容器文件系统tar归档文件创建镜像
save 保存一个或者多个镜像到一个tar归档文件
load  加载镜像来自tar归档或者标准输入

2.5 docker创建镜像方式

docker创建镜像有docker commit 和docker build基于dockerfile创建镜像。
不推荐使用docker commit创建镜像,因为commit创建的镜像可复用性低,容易出错,安全性无法保证。

推荐使用 Dockerfile 方法来代替 docker commit,因为通过前者构建镜像更具备可重复性、透明性以及幂等性。

2.6 通过docker file创建一个镜像

 cat dockerfile 
FROM ubuntu
RUN sed -i 's/archive.ubuntu.com/cn.archive.ubuntu.com/g' /etc/apt/sources.list
RUN sed -i 's/security.ubuntu/cn.archive.ubuntu/g' /etc/apt/sources.list
RUN apt-get -y update && apt-get -y install apache2
EXPOSE 80

执行docker build创建
[root@node01 ~/tmp]# docker build -t ubuntu_with_apache_dockerfile .    
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM ubuntu
latest: Pulling from library/ubuntu
2746a4a261c9: Pulling fs layer 
4c1d20cdee96: Pulling fs layer 
0d3160e1d0de: Downloading 
c8e37668deea: Waiting 
latest: Pulling from library/ubuntu
2746a4a261c9: Pull complete 
4c1d20cdee96: Pull complete 
0d3160e1d0de: Pull complete 
c8e37668deea: Pull complete 
Digest: sha256:250cc6f3f3ffc5cdaa9d8f4946ac79821aafb4d3afc93928f0de9336eba21aa4
Status: Downloaded newer image for ubuntu:latest
 ---> 549b9b86cb8d
Step 2/5 : RUN sed -i 's/archive.ubuntu.com/cn.archive.ubuntu.com/g' /etc/apt/sources.list
 ---> Running in a1e5ceb597cf
Removing intermediate container a1e5ceb597cf
 ---> 88d2aef76ef6
Step 3/5 : RUN sed -i 's/security.ubuntu/cn.archive.ubuntu/g' /etc/apt/sources.list
 ---> Running in 2414f702ca47
Removing intermediate container 2414f702ca47
 ---> 597d2e8dd6de
Step 4/5 : RUN apt-get -y update && apt-get -y install apache2
 ---> Running in 67c06f0c132b
Get:1 http://cn.archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://cn.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 http://cn.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:4 http://cn.archive.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:5 http://cn.archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]

3.容器选项

3.1 管理容器常用命令

命令 解释
-i 交互式
-t 分配伪终端
-d 运行容器到后台
-e 设置环境变量
-p 发布容器端口到主机
-P 发布容器所有expose端口到宿主机随机端口
-name 指定容器随机端口
-h 设置容器主机名
-ip 指定容器ip,只能用于自定义网络
-network 链接容器到一个网络
-mount 将文件系统附加到容器
-v 绑定挂载一个卷
-restart 容器退出时重启策略,默认no,可选值:always|on-failure

3.2 容器资源限制命令

命令 解释
-m,-memory 容器可以使用的最大内存
-memory-swap 允许交换到磁盘的内存量
-memory-swappiness= 容器允许使用swap分区交换的百分比(默认-1)
-oom-kill-disable 禁止使用oom killer
--cpus 可以使用cpu数量
--cpuset-cpus 限制容器使用特定的cpu核心
-cpu-shares cpu共享(相对权重)

3.管理应用程序数据

4.网络模式

5.dockerfile

6.企业级镜像仓库harbor

7.搭建使用私有docker registry

8.docker的系统资源限制及验证

9.docker compose

10.jenkins与docker的自动化ci/cd流水线实战

11.Docker 跨主机网络 overlay

系统学devops系列: docker入门学习操作篇

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: