9.1-Docker-调研
优质
小牛编辑
126浏览
2023-12-01
1.1 定义
- Docker 开发、打包、运行 APP 的平台。
- 把 APP 和底层设备隔离开来。
1.2 架构
1.2.1 重要概念
1.2.1.1 Image
- 文件和 meta data 的集合(root filesystem)。
- 分层,每层可以添加删除修改文件,成为一个新的 image。
- 不同的 image 可以共享相同的 layer。
- image 本身是一个 read-only 的。
1.2.1.1.1 常用命令
- 查看 image
docker image ls docker images
- 从 DockerFile 获取 Image
# 安装编译工具 yum install gcc glibc-static # 编写代码 vim hello.c # 编译代码 gcc -static hello.c -o hello # 编写 Dockerfile vim Dockerfile # 制作镜像 docker [image] build -t wlj/hello-world . # 运行镜像
代码
#include <stdio.h> int main(){ printf("hello docker\n"); }
Dockerfile
# 无基础镜像 FROM scratch # 将 hello 可执行文件添加到 / 目录 ADD hello / # 运行 / 目录下 hello 命令 CMD ["/hello"]
FROM centos run yum install -y vim
- 从 Registry 拉取 Image
docker pull ubuntu
默认从 docker hub 上拉取 Image
- 根据 container 构建 image
制作 container
[root@node12 hello-world]# docker run -it centos [root@47299fe75b83 /]# yum install vim [root@47299fe75b83 /]# exit [root@node12 hello-world]# docker container ls [root@node12 hello-world]# docker commit serene_keldysh wlj/centos-vim docker images docker history 237f9ea41f40
docker [container] commit
- 删除镜像
docker image rm ${id} docker rmi ${id}
1.2.1.2 Container
- 通过 image 创建
- 在 image layer 的基础上增加了一层 container layer(可读写)
- 类比面向对象:类和实例
- image 负责 app 的存储和分发,container 负责运行 app
1.2.1.2.1 常用命令
- 查看当前正在执行 container
docker container ls docker ps
- 查看所有的 container
docker container ls -a docker ps -a
- 创建 container
docker run hello
- 创建交互式 container
docker run -it ubuntu
- 退出 container
exit
- 删除 container
docker container rm ${id}
- 批量删除 container
docker rm $(docker container ls -aq) docker rm $(docker container ls -f "STATUS=exited" -q)
1.2.1.3 Dockerfile
1.2.1.3.1 语法
- FROM
FROM scratch FROM centos FROM ubuntu:14.04
- LABEL
LABEL maintianer:"wlj" LABEL version="1.0" description=""
- RUN
# 执行命令并创建新的 image layer RUN yum ...... RUN /bin/bash -c ''
- WORKDIR
# 指定虚拟机的工作目录,相当于 RUN cd,自动创建不存在的目录。
- ADD and COPY
# 将本地文件上传到 image,ADD 同时解压文件 add srcFile/srcDic desDic
- ENV
# 设置环境变量 ENV JAVA_HOME /usr/lib/java
- VOLUMN and EXPOSE
# 存储和网络
- CMD and ENTRYPOINT
# CMD 设置容器启动后默认执行的命令和参数 # 如过 docker run 指定了其他命令,CMD 命令会被忽略 # 如果定义了多个 CMD,只有最后一个会被执行 # ENTRYPOINT 设置容器启动时运行的命令
1.2.1.3 Registry
镜像仓库
1.2.2 底层技术
- NameSpaces:做隔离 pid,net,ipc,mnt,uts。
- Control groups:资源限制。
- Union file systems:做 Container 和 image 的分层。
容器的资源限制
- 容器
- 镜像
- 网络
- 存储