【docker学习-01】初识docker

1 what is docker?

  • otCloud 公司创始人 Solomon Hykes;
  • go 语言实现;
  • 基于 Linux 内核的 cgroupnamespace
  • 操作系统层面的虚拟化技术;
  • 隔离进程独立于宿主和其他进程,也成为容器;
  • 直接运行于宿主机内核,没有进行硬件虚拟,比传统虚拟机更轻便。

2 why user docker?

  • 更高效利用系统资源;
  • 启动时间更快;
  • 持续集成、自动部署;
  • 迁移方便;
  • 便捷维护和扩展;
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

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 COPY [--chown=<user>:<group>] <源路径>... <目标路径>
ADD ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
CMD CMD echo $HOME----> CMD [ “sh”, “-c”, “echo $HOME” ]
ENTRYPOINT
ENV 设置环境变量 ENV <key1>=<value1> <key2>=<value2>...
ARG 构建参数
VOLUME 定义匿名卷 VOLUME ["<路径1>", "<路径2>"...]
EXPOSE 声明端口
WORKDIR 指定工作目录: WORKDIR <工作目录路径>
USER 指定当前用户: USER <用户名>[:<用户组>]
HEALTHCHECK 健康检查
ONBUILD 后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
其他参考 <https://docs.docker.com/engine/reference/builder/ https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ https://github.com/docker-library/docs

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

猜你喜欢

转载自blog.csdn.net/xinquanv1/article/details/84955277