Docker
Docker
一、简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。
二、基础
1、镜像管理
# 搜索镜像
docker search xx
# 获取镜像
docker pull xx
# 查看镜像
docker images
-q 只显示镜像ID
# 删除镜像
docker rmi xx
2、基础使用
# 启动镜像
docker run --rm --name aa -i -t xx /bin/bash
# --rm 退出自动删除容器;--name 自定义启动后的设备名称;-i 启用交互式;-t 打开终端。
# 退出
exit # 此法退出,容器即关闭
ctrl+p + crtl+q # 此法退出,容器在后台继续运行
# 继续运行已经退出的容器
docker start [-i] id # -i参数可打开交互式界面
# 停止正在运行的容器
docker stop id # 正常退出
docker kill id # 直接杀死
# 查看容器的详细信息
docker inspect xx
# 进入正在运行的容器
# 1、直接通过attach进入
docker attach id
# 2、通过namespace进入
docker inspect --format {{.State.Pid}} id # 如pid为2939
nsenter --target 2939 --mount --uts --ipc --net --pid # 进入
# 删除容器
docker rm id
# 查看日志
docker logs
-f 持续输出日志
-n x 指定倒数x行日志
-t 显示时间戳
# 查看容器内的进程信息
docker top id
# 在运行的容器内新建进程
docker exec [-d] [-i] [-t] id command arguments
3、网络
# 端口
# 启动时可以加 -P 随机映射端口
docker run -P -d xx
# 加 -p 外端口:内端口 手动指定端口
docker run -d -p 38080:80 xx
# 注:-p 有多种方式:
docker run -p host_port:container_port # 一般方式
docker run -p ip:host_port:container_port # 主机多IP,指定绑定的IP和端口
docker run -p ip::container_port # 指定绑定的IP,端口随机
# 网络
# 查看docker已有的网卡模式
docker network ls
# 创建新的网络
docker network create elastic
# 指定容器的网络、IP
docker run --net elastic --ip 10.1.1.1
4、数据管理
# 1、数据卷:将物理机目录a映射到容器目录b(也可以挂文件)
docker run -it -v /a:/b xx # /a:/b:ro ,可指定权限,ro表示容器内文件夹只读
# 2、数据卷容器:将其他容器的数据挂载到目的容器
docker run -it xx --volumes-from yy
三、拓展
1、镜像构建
# 1、手动创建
# pull需要的环境,部署自己的环境,然后commit即可。
docker commit -m "test1" 52c86f403ffb suguang/ubuntu:v1 # -m 为commit的信息;v1显示为tag,默认为latest。
-a 添加作者
-p 指定容器在commit时是否暂停
# 2、Dockerfile
# Dockerfile由以下几部分组成:(指令名需大写,参数小写)
# 基础镜像信息:
FROM
# 维护者信息:
MAINTAINER
# 镜像操作指令:
ADD(添加当前目录文件,自动解压)
COPY(单纯文件,推荐使用)
VOLUME(定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷)
RUN(运行系统命令)
EXPOSE(指定映射端口,即内部使用的端口号)
WORKDIR(即cd)
ENV(设置环境变量)
USER(指定运行容器的用户,默认root)
ONBUILD(本次不会执行,当有其他Dockerfile使用from到本镜像的时候,执行)
# 容器启动时执行指令:
CMD(容器运行时未指定命令时执行)
ENTRYPOINT(容器运行指定命令时依然执行)
# 详细指令内容参考:https://www.runoob.com/docker/docker-dockerfile.html
# 写完Dockerfile之后,直接运行build
docker build -t test:v1 /opt/test # -t 设置名称;/opt/test为Dockerfile所在的目录。
--no-cache 不使用缓存(便于构建过程中获取最新的组件)
2、原理
1、资源隔离
使用的是lxc,linux系统的容器技术,通过内核的namespace进行隔离。
有pid、net、ipc、mnt、user、uts等namespace。
pid:进程隔离
net:管理网络接口
ipc:管理跨进程通信的访问
mnt:管理挂载点
UTS:隔离内核和版本标识
2、资源限制
底层使用cgroups进行资源的限制。
cgroups起到资源限制、优先级设定、资源计量、资源控制等作用。
主要控制CPU、内存等。
可在docker run时添加-c对CPU进行限制,加-m对内存进行限制。
3、网络
bridge模式:桥接模式(默认)。
Host模式 :容器直接使用主机的网络,不用做nat。
None模式 :无网络。
3、镜像仓库
# 使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。使用镜像仓库,加速访问Docker Hub的速度。
# 可以使用DaoCloud的镜像站:https://www.daocloud.io/mirror#accelerator-doc
# 一键配置脚本
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
4、其他
docker registry:私有仓库
docker compose: 多容器管理。
docker shipyard:docker的UI。
docker Portainer: UI2。
所谓遇见,只为离别

浙公网安备 33010602011771号