0
点赞
收藏
分享

微信扫一扫

【docker学习-01】初识docker


1 what is docker?

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

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 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

其他参考


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


举报

相关推荐

0 条评论