1 what is docker?
- otCloud 公司创始人 Solomon Hykes;
- go 语言实现;
- 基于 Linux 内核的 cgroup,namespace;
- 操作系统层面的虚拟化技术;
- 隔离进程独立于宿主和其他进程,也成为容器;
- 直接运行于宿主机内核,没有进行硬件虚拟,比传统虚拟机更轻便。
2 why user docker?
- 更高效利用系统资源;
- 启动时间更快;
- 持续集成、自动部署;
- 迁移方便;
- 便捷维护和扩展;
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 | 一般为 |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
3 Basic Concepts
- Image:
- 特殊文件系统;
- UnionFS技术的分层存储,由多层文件系统联合组成。
- Container
- 镜像–容器 <---------> 类–实例;
- 容器操作:创建、启动、停止、删除、暂停;
- 本质是进程,运行于自己独立的命名空间;
- 镜像为基础层,容器为存储层;
- 容器存储层要保持无状态化,数据卷的生存周期独立于容器,持久化;
- Repository
- Docker Registry:集中的存储、分发镜像的docker服务;
- 公开服务;
- 私有 Registry 服务;
4 Practise
4.1 ubuntu install
sudo apt-get update
sudo apt-get install docker-ce
## 1 创建docker组
sudo groupadd docker
## 2 当前用户加入docker组
sudo usermod -aG docker $USER
4.2 use docker image
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull ubuntu:18.04
## 启动镜像 -i交互式操作 -t一个终端 --rm容器退出后删除 bash 交互式shell
docker run -it --rm ubuntu:18.04 bash
## 列出已经下载的镜像
docker image ls
## 查看镜像、容器、数据卷所占用的空间。
docker system df
## 删除本地镜像-镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
docker image rm [选项] <镜像1> [<镜像2> ...]
docker image rm $(docker image ls -q redis
docker image rm $(docker image ls -q -f before=mongo:3.2)
##
4.3 Dockerfile
- 每一个
RUN
的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit
这一层的修改,构成新的镜像。
这并不是在写 Shell 脚本,而是在定义每一层该如何构建;
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
构建命令格式:
docker build [选项] <上下文路径/URL/->
docker build -t nginx:v3 .
## 用给定的 tar 压缩包构建
docker build http://server/context.tar.gz
## 从标准输入中读取 Dockerfile 进行构建
docker build - < Dockerfile
cat Dockerfile | docker build -
4.4 Dockerfile Command
COPY |
|
ADD | ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz / |
CMD | CMD echo $HOME----> CMD [ “sh”, “-c”, “echo $HOME” ] |
ENTRYPOINT | |
ENV | 设置环境变量 |
ARG | 构建参数 |
VOLUME | 定义匿名卷 |
EXPOSE | 声明端口 |
WORKDIR | 指定工作目录: |
USER | 指定当前用户: |
HEALTHCHECK | 健康检查 |
ONBUILD | 后面跟的是其它指令,比如 |
其他参考 | |
4.5 docker operation
## 下面的命令输出一个 “Hello World”,之后终止容器。
docker run ubuntu:14.04 /bin/echo 'Hello world'
## 下面的命令则启动一个 bash 终端,允许用户进行交互。
docker run -t -i ubuntu:14.04 /bin/bash
## 终止、查看、重启容器
docker container stop
docker container ls -a
docker container restart
## 删除终止状态的容器
docker container rm trusting_newton
## 清除所有终止状态的容器
docker container prune