数码资讯
Docker
Docker 一、简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
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。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。