docker
docker官网: https://docs.docker.com
docker版本:
社区版(CE)
企业版(EE)
支持平台:
linux
MAC
WINDOWS
DOCKER 安装
# 安装依赖包
yum -y install yum-utils
# 添加docker软件包源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker CE,安装时不要直接打docker,因为docker做过升级,直接打docker安装的版本比较落后,落后3-4版本
yum -y install docker-ce
# 启动docker服务
systemctl start docker.service //启动
systemctl enable docker.service //开机启动
DOCKER 镜像管理
镜像是什么
一个分成存储的文件,不是一个单一的文件
一个软件的环境
一个镜像可以创建N个容器
一种标准化的交付
一个不包含linux内核而又精简的linux操作系统
配置加速器
# docker hub是由docker公司负责维护的公告镜像仓库,包含大量的容器镜像,docke工具默认从这个公共镜像仓库下载镜像
# https://hub.docker.com docker官方镜像仓库
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]
}
# 重启docker
systemctl restart docker
镜像常用的命令
语法: docker [选项] 命令
选项:
-v,--version //查看docker版本
管理命令:
image //镜像管理
命令:
info //查看当前docker配置信息
语法: docker image 命令
docker image 命令:
build //构建镜像
history //查看镜像历史信息
import
inspect //显示一个或多个
load //加载镜像来自tar归档或者 标准输入
ls //列出镜像
prune //移除没有被使用的镜像
pull //从镜像仓库拉去+
push //推送一个镜像到镜像仓库
save //保存一个或多个镜像到一个tar归档文件
tag
ls :
语法: docker image ls [选项] [镜像[:标签]]
选项:
-a,--all 显示全部的意思(默认选项)
例子: docker image ls //查看所有镜像
docker image ls == docker images
例子: docker image ls nginx //查看nginx镜像
save :
语法: docker image save 镜像 [选项] 文件
简写: docker save 镜像 [选项] 文件
选项:
-o 导出到文件中
例子: docker image save nginx -o nginx.tar
简写:
load :
语法: docker image load [选项] tar文件
简写: docker load [选项] tar文件
选项:
-i 读取本地tar包导入docker
例子: docker image load -i nginx.tar
简写: docker load -i nginx.tar
DOCKER 容器
创建容器常用选项
run :
语法: docker container run [选项] IMAGE
docker run [ -it -d -e env=pord -p 宿主机端口:容器端口 --name 容器名 -h 主机名 --restart=always] 镜像名
简写: docker run [选项] IMAGE
选项:
-i 交互式,一般与-t一起使用
-t 伪终端,一般与-i一起使用
-d 后台运行
例子:
docker run -d centos //不能启动推出状态
docker run -it -d nginx //-it 为容器分配一个伪终端,1号进程,来保持容器的运行,纯净的系统是没有1号进程的
选项:
-e,-env 设置变量
-p 发布容器端口到主机端口
-P 发布容器所有的EXPOSE的端口到宿主机水机端口
--name 指定容器名称
-h 设置主机名
--ip 指定容器IP,只能用于自定义网络
--network 连接容器到一个网络
-v,--mount 将文件系统附加到容器
--restart 容器退出时重启策略,默认no,可选值:[always|on-failure]
例子: docker run -d -e env=pord -p 88:80 --name web -h web --restart=always nginx
资源限制选项:
-m 容器可以使用的最大内存
-memory-swap 允许交互到磁盘的内存量
-memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(1-100,默认为-1)
-oom-kill-disable 禁用OOM killer
--cpus 可以使用的COU数量
-cpuset-cpus 限制容器特定的CPU核心,如(0-3,0,1)
-cpu-shares CPU共享(相对权重)
例子: docker run -d -m="500m" --cpus="1" nginx //内存最大使用500m,cpu使用1个
/var/lib/docker/containers/容器ID //容器的目录
/var/lib/docker/overlay2/容器ID //容器的目录
常用管理命令
exec:
语法: docker container exec [选项] 容器名|容器ID bash|指令
简写: docker exec [选项] 容器名|容器ID bash
选项:
-i 交互式
-t 伪终端
例子:
也可以直接执行命令
docker exec web ls
ls : 列出容器
语法: docker container ls [选项]
选项:
-a 全部
-l 列出最新创建的容器
-q 列出所有的容器ID
注意:
docker container ls == dockers ps
inspect :
语法: docker container inspect [选项] 容器名
简写: docker inspect [选项] 容器名
例子: docker container inspect web
commit : 创建一个新镜像来自一个容器
语法: docker container commit [OPTIONS] 容器 [镜像名[:标签]]
简写: docker container commit [OPTIONS] 容器 [镜像名[:标签]]
例子: docker container commit web web:latest
cp : 复制文件到容器
语法: docker container cp [选项] 容器:目录
简写: docker cp [选项] 容器:目录
例子: docker cp 123.txt web:/root
logs : 获取容器日志
语法: docker container logs [选项] 容器
简写: docker logs [选项] 容器
例子: docker logs web
port : 列出或指出容器端口
语法: docker container port 容器名
简写: docker port 容器名
例子: docker container port web
top : 显示容器运行的进程
语法: docker container top 容器 [ps 选项]
简写: docker top 容器 [ps 选项]
例子: docker contweb
stats : 选项示容器资源使用统计
语法: docker container stats [选项] 容器
简写: docker stats [选项] 容器
选项:
--no-stream 退出交互状态
例子: docker container stats web
stop/start/restart : 停止/启动/重启容器
语法: docker container stop|start|restart [选项] 容器
简写: docker stop|start|restart [选项] 容器
例子: docker container stop web
rm : 删除容器
语法: docker container rm [选项] 容器|容器ID
简写: docker rm [选项] 容器
选项:
-f 强制
-l 链接
-v 逻辑卷
例子: docker container rm web
删除所有容器
docker rm $(docker ps -qa)
prune : 删除停止的容器
语法: docker container prune [OPTIONS]
选项:
-f 强制
容器数据
docker 提供三种方式将睡觉从宿主机挂在到容器中:
volumes: docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式
bind mounts: 将宿主机上的任意位置的文件或者目录挂载到容器中
volume:
语法: docker volume 命令
命令:
create
inspect
ls
prune
rm
create: 创建逻辑卷
语法: docker volume create [选项] [逻辑卷]
例子: docker volume create nginx-vol
inspect:
语法: docker volume inspect [选项] VOLUME [VOLUME...]
ls:
语法: docker volume ls [选项]
例子: docker volume ls
prune:
语法: docker volume prune [选项]
rm:
语法: docker volume rm [选项] VOLUME [VOLUME...]
例子:
1. 创建数据卷
docker volume create nginx-vol
2. 使用数据卷
docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
或
docker run -d --name=nginx-test --mount src=nginx-vol:/usr/share/nginx/html nginx
bind mounts 示例
1.创建目录
mkdir /opt/wwwroot/
2.挂在宿主机目录到容器
docker run -it -d --name web -p 88:80 -v /opt/wwwroot/:/usr/share/nginx/html nginx
3. 根据情况而定,可以存放自定义文件,也可以存放数据
vim /opt/wwwroot/index.html
制作镜像:
- 启动容器后的应用程序产生的数据尽量放到一个目录
- 构建镜像是不能将已经生产的应用程序镜像打包进去的
jenkins gitlab使用docker都是采用-v将他们自身产生的数据出街话宿主机
容器网络
DNAT 目标地址转换
SNAT 源地址转换
dockerfile
docker通过dockerfile自动构建镜像,dockerfile是一个包含用于组建镜像的文本文件,由一条一条指令组成
创建dockerfile目录
mkdir dockerfile
FROM //构建新镜像基于那个镜像
LABEL //标签
RUN //构建镜像时运行的Shell命令
COPY //拷贝文件或目录到镜像中
ADD //解压压缩包并拷贝
ENV //设置环境变量
USER //为RUN,CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE //声明容器运行的服务端口
WORKDIR //为RUN,CMD,ENTRYPOINY,COPY和ADD设置工作目录
CMD ["nginx","-g","daemon off;"] //-g 全局,daemon off 退出前台启动,后台启动
build: 构建docker镜像
语法: docker build [选项] 文件路径
选项:
-t 镜像名称
-f 指定Dockerfile文件位置
例子: docker build -t nginx:v1 .
编译安装一个软件
1. 安装依赖包
2. ./configure 检查环境依赖
3. make 编译
4. make install 安装
Harbor
Harbor 是由VMWare公司开源的容器镜像仓库。事实上,Harbor 是在Docker Registry上进行相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括,管理用户界面,基于角色访问控制,AD/LDAP基础已经审计日志等,足以满足基本企业需求
官方: https://goharbor.io/
Github: https://github.com/goharbor/harbor
Harbor 部署: 先决条件
服务器硬件配置:
最低要求: CPU2核/内存4G/硬盘40GB
推荐: CPU4核/内存8G/硬盘160GB
软件:
Docker CE 17.06版本+
Docker Compose 1.18版本+ 批量管理容器
Harbor安装有两种方式
在线安装: 从Docker Hub 下载Harbor相关镜像,因此安装软件包非常小
离线安装: 安装包包含部署的相关镜像,因此安装包比较大