1. 容器简介
奔驰车生产好之后,经过集装箱封装,从纽约运送到了上海,开箱后奔驰车可以跑在上海的大街上。
软件在环境A开发好之后,经过集装箱封装,从环境A运送到了环境B,开箱后软件可以跑在环境B。
这种软件集装箱技术,就是容器技术,英文叫做 Linux Container。
容器技术的主要优点是轻量虚拟化(良好的隔离性、高资源利用率)、快捷和可移植性。
起初,容器技术做的最好的就是Docker,Docker也几乎就是容器的代名词,后来CoreOS、Mesos、Containerd也都相继发展壮大。为了统一容器标准,OCI(Open Container Initiative)组织成立了,并于2016年4月推出了第一个开放容器标准,标准主要包括image镜像标准和runtime运行时标准。
2. Docker简介
Docker是一个开源的容器引擎(管理容器的工具),可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
应用场景:开发环境搭建、自动化构建、自动化测试、自动化部署。
Docker系统有两个程序:docker服务端和docker客户端。
其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。
Docker优点:
Build, Ship and Run.
Build once, run anywhere.
参考文档:
3. Docker安装
3.1. centos7安装docker
参考文档Install Docker Engine on CentOS
1、安装yum-utils
1 | yum install yum-utils |
2、添加docker-ce源
1 | # 官方源 |
3、更新yum包
1 | yum makecache fast |
4、查看docker版本
1 | yum list | grep docker |
看到如下内容:
1 | docker-ce.x86_64 3:23.0.1-1.el7 docker-ce-stable |
5、安装指定版本docker
1 | yum install docker-ce # 安装最新版 |
6、启动docker-ce并设置开机启动
1 | systemctl start docker |
3.2. ubuntu18安装docker
参考文档Install Docker Engine on Ubuntu
注意:ubuntu不要使用snap安装docker,否则配置和其他系统不一致很麻烦。
1、删除自带的老版本
1 | apt-get remove docker docker-engine docker.io containerd runc |
2、安装依赖
1 | apt-get update |
3、添加docker官方GPG key
1 | mkdir -p /etc/apt/keyrings |
4、建立仓库
1 | echo \ |
5、查看docker版本
1 | apt-get update |
6、安装指定版本docker
1 | VERSION_STRING=5:20.10.13~3-0~ubuntu-bionic |
3.3. win10安装docker
参考文档:《Win10安装配置Docker》
3.4. 升级和降级docker
4. helloworld
4.1. 运行容器
国际惯例,先跑一个helloworld。
1 | docker pull busybox:1.25 |
4.2. docker pull说明
docker pull busybox:1.25
从镜像仓库下载一个名称为 busybox:1.25 的镜像。
等价于 docker pull docker.io/busybox:1.25
,这是因为docker默认的镜像仓库就是 docker.io
4.3. docker run说明
docker run busybox:1.25 echo "helloworld"
busybox:1.25 镜像作为模板启动一个容器,容器中运行echo程序,参数为”helloworld”。
容器启动后,输出了 helloworld ,然后就停止了。这是因为,1号进程(echo进程)停止了,容器也随之停止。
docker镜像运行起来,便会生成一个docker容器。docker容器可以理解为在沙盒中运行的进程,这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell环境等等。
这个沙盒默认不会运行任何程序,我们需要指定一个程序在启动容器时运行。这个程序对应的进程是该容器的1号进程,当该进程结束的时候,容器也会完全停止。