Docker
What
Docker是一个平台,它提供哪些服务呢?任何一台装有Docker的机器上你都可以建立、发布、运行你的应用程序。
docker vs vm
Why
省事、省时、省钱
- 用来取代虚拟机
- Docker可以在几毫秒内为您提供一个沙盒环境。
- Docker在一台机器上起成百上千个独立的容器,有助于模拟网络,使网络建模成为一件轻而易举的事情。
- 由于你可以将所有系统打包进你的Docker容器,所以可以移动工作,甚至脱网离线工作。
- Docker强迫你记录软件依赖,方便你其他地方布局或者安装软件。
- 实现持续交付
- 减少调试开销
docker 前后
开发阶段、测试阶段和版本发布阶段
How
网站
https://hub.docker.com/
http://www.dockerchina.cn
https://rancher.com/
指令介绍
官方说明
https://docs.docker.com/engine/reference/commandline/docker/
镜像制作 DockerFile
安装 docker
-
在线
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 yun install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable docker systemctl start docker # 下载docker-compose wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 chmod a+x /usr/local/bin/docker-compose
-
离线
-
下载资源
sudo yum install -y --downloadonly -- downloaddir=$PWD yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y --downloadonly --downloaddir=$PWD docker-ce wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.28.2/docker-compose-Linux-x86_64 chmod a+x /usr/local/bin/docker-compose
-
安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum install -y containerd* sudo yum install -y docker-ce* chmod a+x ./docker-compose cp ./docker-compose /usr/local/bin/ systemctl enable docker systemctl start docker
-
指令
指令大全
Run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数 | 说明 |
---|---|
–name | 给容器命名 |
-d | 指定容器运行于后台 |
-i | 打开STDIN,用于控制台交互 |
-t | 分配tty设备,可以支持终端登录 |
-u | 指定容器的用户 |
-a | 登录容器 |
-w | 指定容器的工作目录 |
-e | 指定环境变量 |
-p | 指定容器暴露的端口 |
-h | 指定容器的主机名 |
-v | 给容器挂载存储卷 |
–dns=[] | 指定容器的dns服务器 |
–privileged | 指定容器是否为特权容器 |
–rm | 指定容器停止后自动删除容器 |
镜像操作
# 拉取镜像
docker pull $image_uri
# 查看所有镜像
docker images
# 创建容器并命名
docker run -itd --name $container_name $image_uri
# 查看所有容器
docker ps
# 容器内执行指令
docker exec -it $container_name /bin/bash
# 创建容器并挂载宿主目录
docker run -itd -v /home/tmp:/home/tmp --name $container_name $image_uri
容器退出
- 关闭退出
exit
- 不关闭退出
ctrl+P+Q
- 逐层推出(包括ssh)
ctrl+D
查看容器日志
docker logs -t -f --tail 10 c8
参数 | 作用 |
---|---|
-t | 显示时间 |
-f | 持续增加 |
–tail n | 显示最后n条 |
容器信息自定义显示
docker ps --format "table {{.ID}}\t{{.Status}}\t{{.Names}}\t{{.Command}}\t{{.Ports}}\t{{.Image}}\t{{.CreatedAt}}"
查看网络信息
docker network ls
查看容器细节
docker inspect $container_name
查看指定容器的 IP
# 所有容器,或指定容器IDorName
docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(sudo docker ps -aq)
查看volume数据券(含删除容器的遗留)
docker volume ls
查看不再用的volume
docker volume ls -qf dangling=true
查看容器磁盘使用情况
docker system df
清除docker相关磁盘
-
删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
-
docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。
-
注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了.所以使用之前一定要想清楚吶。
docker system prune -a
清除容器日志
$ echo "" > $(docker inspect --format='{{.LogPath}}' <容器ID>)
查看容器进程
docker top $container_name
容器宿主间复制文件
docker cp $container_name:/home/t.txt ./
docker cp ./file $container_name:/home/
网络
管理
#centos <7.7 brctl
yum install bridge-util
# centos >7.7
nmcli
创建自定义网络
docker network create --subnet=172.16.0.0/16 --driver bridge $net_name
使用自定义网络
docker run .... --net $net_name --ip 192.168.3.2 ....
#docker-compose.yml version:>3.4
# 自定义IP,也可不指定
networks:
default:
ipv4_address: 172.16.0.10
# ipv6_address: 2001:3984:3989::10
networks: # 与service对齐
default:
external:
name: $net_name
查看网桥
nmcli c show # 显示所有bridge
ip addr show docker0 # docker 基础网络
ip addr show $bridge_name
docker network inspect $net_name
daemon.json
https://www.cnblogs.com/golinux/p/12759674.html
查阅
man dockerd # 列出所有参数及说明
“bip”:“172.17.0.0/16” # 指定默认网桥IP范围 管理 docke run 的容器
docker-compose
说明
https://docs.docker.com/compose/
域名解析
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
指定IP
version: "3.9"
services:
app:
image: nginx:alpine
networks:
default:
ipv4_address: 172.16.0.10
# ipv6_address: 2001:3984:3989::10
# 创新新网络
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"