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。
posted @ 2022-05-19 11:28  CZMG  阅读(64)  评论(0)    收藏  举报