- docker使用
- 安装
- 查看docker相关信息
- 查看版本信息
- 查看详细信息
- alipine介绍
- 管理软件
- 镜像管理
- 下载镜像
- 阿里云获取加速地址
- 查看本地镜像
- 镜像导出
- 镜像导入
- 删除镜像
- 镜像打标签
- 容器相关命令
- 启动容器
- 运行交互式容器
- 查看容器信息
- 查看容器内的进程
- 查看容器资源使用情况
- 查看容器详细信息
- 删除容器
- 容器启动和停止
- 给正在运行的容器发送信号
- 进入正在运行的容器
- 使用attach命令
- 使用exec命令
- 宿主机和容器之间拷贝文件
- 端口
- 随机端口映射
- 指定端口映射
- 修改已经指定的端口
- 查看容器的日志
- 传递运行命令
- 容器内部hosts文件
- 指定容器的DNS
- 使用systemd控制容器运行
- 传递环境变量
- 启动容器
- 镜像
- 镜像制作方式
- 基于现有容器通过docker commit手动构建镜像
- 利用Dockerfile文件执行docker build自动构建
- 常见指令
- docker build命令构建镜像
- docker数据管理
- 数据持久保存方式:数据卷
- 数据卷分类
- 数据卷使用方法
- 方式一
- 方式二
- 方式三
- 删除匿名卷
- 数据卷管理命令
- 数据卷容器
- 网络管理
- 默认
- 容器间通信
- 禁止容器间通信
- 修改默认docker0网桥的网络配置
- 修改默认网络设置,使用自定义网桥
- 容器名称互联
- 容器名称实现
- docker网络连接模式
- docker五种网络模式
- 网络模式指定
- 默认网络模式bridge
- 修改默认bridge的网络配置
- host模式
- none模式
- container模式
- 自定义网络模式
- Docker-compose
- docker-harbor
- 命令行登录:
- 上传镜像:
- 拉取镜像:
- 修改配置
docker使用
安装
略...
查看docker相关信息
查看版本信息
[root@docker-server ~]# docker version
Client: Docker Engine - Community
Version: 23.0.3
API version: 1.42
Go version: go1.19.7
Git commit: 3e7cbfd
Built: Tue Apr 4 22:04:18 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 23.0.3
API version: 1.42 (minimum version 1.12)
Go version: go1.19.7
Git commit: 59118bf
Built: Tue Apr 4 22:02:01 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.20
GitCommit: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
runc:
Version: 1.1.5
GitCommit: v1.1.5-0-gf19387a
docker-init:
Version: 0.19.0
GitCommit: de40ad0
查看详细信息
[root@docker-server ~]# docker info
Client:
Context: default
Debug Mode: false #client 端是否开启 debug
Plugins:
buildx: Docker Buildx (Docker Inc.) #docker-build信息
Version: v0.10.4
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.) #docker-compose信息
Version: v2.17.2
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0 #当前主机运行的总容器数
Running: 0 #有几个容器正在运行
Paused: 0 #有几个主机是正在暂停的
Stopped: 0 #有几个容器是停止的
Images: 0 #当前服务器的镜像数量
Server Version: 23.0.3 #服务端版本
Storage Driver: overlay2 #正在使用的存储引擎
Backing Filesystem: extfs #后端文件系统,即服务器的磁盘文件系统
Supports d_type: true #是否支持d_type
Using metacopy: false #未知
Native Overlay Diff: true #是否支持差异数据存储
userxattr: false #未知
Logging Driver: json-file #日志类型
Cgroup Driver: cgroupfs #Cgroups 类型
Cgroup Version: 1 #Cgroups版本
Plugins: #插件
Volume: local #卷
Network: bridge host ipvlan macvlan null overlay #overlay 跨主机通信
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog #日志类型
Swarm: inactive #是否支持swarm
Runtimes: io.containerd.runc.v2 runc #已安装的容器运行时
Default Runtime: runc #默认使用的容器运行时
Init Binary: docker-init #初始化容器的守护进程,即pid为1的进程
containerd version: 2806fc1057397dbaeefbea0e4e17bddfbd388f38 #版本
runc version: v1.1.5-0-gf19387a #runc版本
init version: de40ad0 #init版本
Security Options: #安全选项
apparmor #安全模块,https://docs.docker.com/engine/security/apparmor/
seccomp #安全计算模块,即制容器操作,https://docs.docker.com/engine/security/seccomp/
Profile: builtin #默认的配置文件
Kernel Version: 3.10.0-1160.el7.x86_64 #宿主机内核版本
Operating System: CentOS Linux 7 (Core) #宿主机操作系统
OSType: linux #宿主机操作系统类型
Architecture: x86_64 #宿主机架构
CPUs: 10 #宿主机 CPU 数量
Total Memory: 15.51GiB #宿主机总内存
Name: docker-server.placjh.com #宿主机 hostname
ID: 2d6277c4-8269-4932-9d23-7cffe7f40e8a #宿主机 ID
Docker Root Dir: /var/lib/docker #宿主机关于docker数据的保存目录
Debug Mode: false #server 端是否开启 debug
Registry: https://index.docker.io/v1/ #仓库路径
Experimental: false #是否测试版
Insecure Registries:
127.0.0.0/8 #非安全的镜像仓库
Registry Mirrors:
https://yct1mrfl.mirror.aliyuncs.com/ #镜像仓库
Live Restore Enabled: false #是否开启活动重启 (重启docker-daemon 不关闭容器 )
alipine介绍
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各
种软件
管理软件
#修改源替换成阿里源,将里面 dl-cdn.alpinelinux.org 的 改成 mirrors.aliyun.com
vi /etc/apk/repositories
http://mirrors.aliyun.com/alpine/v3.8/main/
http://mirrors.aliyun.com/alpine/v3.8/community/
#更新源
apk update
#安装软件
apk add vim
#删除软件
apk del openssh openntp vim
镜像管理
查看镜像分层历史
docker image history nginx
docker inspect nginx
搜索镜像
docker search 镜像名称
#输出
OFFICIAL 官方镜像
AUTOMATED 第三方
下载镜像
docker pull NAME[:TAG|@DIGEST]
NAME: 是镜像名,一般的形式 仓库服务器:端口/项目名称/镜像名称
:TAG: 即版本号,如果不指定:TAG,则下载最新版镜像
镜像下载保存路径
/var/lib/docker/overlay2/镜像ID
阿里云获取加速地址
浏览器打开http://cr.console.aliyun.com,注册或登录阿里云账号,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明:
查看本地镜像
docker images
#只显示镜像ID
docker images -q
输出信息
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符),默认为latest
IMAGE ID #镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED #镜像在仓库中被创建时间
VIRTUAL SIZE #镜像的大小
镜像导出
docker save -o 文件 镜像名称
docker save 镜像名称 > 文件
#说明:
Docker save 使用IMAGE ID导出,在导入后的镜像没有REPOSITORY和TAG,显示为<none>
镜像导入
docker load -i 文件名
docker load < 文件名
删除镜像
docker rmi [-f强制删除] 镜像名称|镜像ID
docker image rm [-f强制删除] 镜像名称|镜像ID
镜像打标签
docker tag 可以给镜像打标签,类似于起别名,但通常要遵守一定的命名规范,才可以上传到指定的仓库
docker tag 源镜像名称[:TAG] 镜像名称[:TAG]
容器相关命令
#查看命令
docker container
启动容器
docker run
docker start
#选项
-i #保持STDIN(标准输入)打开,通常和-t一起使用
-t #分配pseudo-TTY,通常和-i一起使用,注意对应的容器必须运行shell才支持进入
-d #后台运行,并打印容器ID
--name 名称 #为容器分配一个名称
--h 名称 #容器主机名
--rm #当容器退出时自动删除它
-P #将容器定义的所有端口发布到主机随机端口
-p 本地端口:容器端口 #将容器的端口发布到主机指定端口
--add-hosts #添加hosts解析
--dns #指定DNS服务器
--restart=no|always|on-failure:3|unless-stopped #no 默认值,表示容器退出时,docker不自动重启容器;on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃;always 容器退出时总是重启;unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
注意: 容器启动后,如果容器内没有前台运行的进程,将自动退出停止
运行交互式容器
docker run -it busybox sh
查看容器信息
docker ps
-a #显示本机所有的容器
-q #只显示数字ID
-s #显示文件总大小
-f #根据提供的条件进行过滤
-l #显示最新创建的容器,包括所有状态
-n #显示最后创建的容器,包括所有状态
查看容器内的进程
docker top 容器名或ID
查看容器资源使用情况
docker stats 容器名或ID
-a #所有容器
查看容器详细信息
docker inspect 容器名或ID
-f #选择性查看,key/value
docker inspect -f "{{.NetworkSettings.Networks.bridge.IPAddress}}" serene_booth
删除容器
docker rm 容器名或ID
docker container rm 容器名或ID
-f #强制删除,包括正在使用的
-v #删除与容器关联的卷
#删除停止的容器
docker container prune
--filter #筛选条件
-f #不提示确认
容器启动和停止
格式
docker start|stop|restart|pause|unpause 容器ID|名称
给正在运行的容器发送信号
docker kill 可以给容器发信号,默认号SIGKILL,即9信号
docker kill 容器名称或ID
-s #指定发送信号
进入正在运行的容器
使用attach命令
类似于vnc连接,操作会在同一个容器的多个会话界面同步显示,所有使用此方式进入同一容器的操作都是同步显示的,且使用exit退出后容器自动关闭,不推荐使用,需要进入到有shell环境的容器
docker attach 容器名|ID
使用exec命令
在运行中的容器启动新进程,可以执行单次命令,以及进入容器,测试环境使用此方式,使用exit退出,但容器还在运行,此为推荐方式
docker exec 容器名|ID
-d #后台运行命令
-e #设置环境变量
-i #保持stdin(标准输入)打开
-t #分配一个伪tty
常见用法
docker exec -it 容器名|ID sh|bash
执行一次性命令
docker exec pid 命令
宿主机和容器之间拷贝文件
#从容器拷贝到宿主机
docker cp 容器名:路径 宿主机路径
#从宿主机拷贝到容器
docker cp 宿主机路径 容器名:路径
端口
随机端口映射
容器启动后,默认用的是预定义的NAT网络,外部无法直接访问,使用-P选项可以将容器中定义好的端口映射到宿主机的随机端口,默认从32768开始,当容器重启时,端口可能会发生变化
docker run -P 镜像名
查看容器与主机的端口映射关系
docker port 容器名|ID
docker port nginx_test 80/tcp
指定端口映射
可以使用-p选项将容器的预定义的指定端口映射到宿主机的相应端口,多个容器映射到主机的端口不能冲突,容器内使用的端口可以相同
#指定映射端口
docker run -p 宿主机端口:容器端口 镜像名
#随机映射端口
docker run -p 容器端口 镜像名
#宿主机IP:端口:容器端口
docker run -p 宿主机IP:端口:容器端口 镜像名
#宿主机IP:宿主机随机端口:容器端口,默认从32768开始
docker run -p 宿主机IP:宿主机随机端口:容器端口 镜像名
#宿主机IP:宿主机端口:容器端口/协议,默认tcp
docker run -p 宿主机IP:宿主机端口:容器端口/协议 镜像名
#一次性映射多个端口+协议
docker run -p 宿主机端口:容器端口/协议 -p 宿主机端口:容器端口/协议 -p 宿主机端口:容器端口/协议 镜像名
修改已经指定的端口
#需要先停止docker服务
systemctl stop docker
#修改容器相关文件
vim var/lib/docker/containers/容器ID/hostconfig.json
#找到下面这一行
"PortBindings":{}
#修改为
"PortBindings":{"容器端口/协议":[{"HostIp":宿主机IP"","HostPort":"宿主机端口"}]}
#启动docker服务
systemctl start docker
#启动容器
docker start 容器名|ID
查看容器的日志
docker logs 可以查看容器中运行的进程在控制台输出的日志信息
docker logs 容器名|ID
-f #跟踪日志输出
--since #只输出指定时间戳后的日志,格式为:--since="2023-04-09-13:35"或--since 2023-04-09-13:35
--tail #从倒数第几行开始显示
-t #显示时间戳
--until #只输出指定时间戳前的日志
传递运行命令
容器需要有一个前台运行的程序才能保证容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像时指定容器运行时前台运行的命令
容器里的PID为1的守护进程的实现方式
服务类:如nginx,tomcat,apache等,但服务不能停止运行
命令类:如tail -f /etc/hosts,主要用于测试环境,注意,不要tail -f <服务访问日志> 会产生不必要的磁盘IO
#举例
docker run -d nginx bash -c "nginx;tail -f /etc/hosts"
容器内部hosts文件
容器会将容器的主机名加入自己的/etc/hosts文件,并解析成容器的IP
[root@docker-server ~]# docker run -it -h test.placjh.com nginx bash
root@test:/# hostname
test.placjh.com
root@test:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 test.placjh.com test
指定容器的DNS
容器的dns服务器默认采用宿主机的DNS地址,也可以指定其他DNS地址
- 将NDS地址配置在宿主机
- 在容器启动时加选项--dns=x.x.x.x
- 在/ets/docker/daemon.json文件中指定
指定DNS地址(优先级最高)
[root@docker-server ~]# docker run -it --dns 8.8.8.8 nginx bash
root@f9de7d3c7e0e:/# cat /etc/resolv.conf
search placjh.com
nameserver 8.8.8.8
指定domain名
[root@docker-server ~]# docker run -it --dns-search test.com nginx bash
root@3301ea764192:/# cat /etc/resolv.conf
search test.com
nameserver 192.168.1.254
配置文件指定DNS和搜索domain名
[root@docker-server ~]# vim /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"registry-mirrors": ["https://yct1mrfl.mirror.aliyuncs.com"],
"dns": ["114.114.114.114", "119.29.29.29"],
"dns-search": [ "placjh.com", "chen.org"]
}
需要重启docker服务
容器内和宿主机之间复制文件
#将文件复制到宿主机
docker cp 容器名称|容器ID:路径 宿主机路径
#将文件复制到容器
docker cp 宿主机路径 容器名称|容器ID:路径
使用systemd控制容器运行
[root@docker-server ~]# cat /lib/systemd/system/hello.service
[Unit]
Description=Hello World
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox-hello
ExecStartPre=-/usr/bin/docker rm busybox-hello
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox-hello busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/usr/bin/docker kill busybox-hello
[Install]
WantedBy=multi-user.target
[root@ubuntu1804 ~]#systemctl daemon-reload
[root@ubuntu1804 ~]#systemctl enable --now hello.service
传递环境变量
有些容器运行时,需要传递环境变量,可以使用-e <参数>或--env-file <参数文件>实现
例如MySQL:
#MySQL启动时必须指定root的口令
[root@docker-server ~]# docker run --name mysql1 mysql
......
You need to specify one of the following:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
#使用-e传参
[root@docker-server ~]# docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=1234567 mysql
#使用--env-file传参
[root@docker-server ~]# cat env.txt
MYSQL_ROOT_PASSWORD=1234567
[root@docker-server ~]# docker run --name mysql1 --env-file env.txt mysql
镜像
镜像制作方式
docker commit #通过修改现有容器,将之手动构建为镜像
docker build #通过Dockerfile文件,批量构建为镜像
基于现有容器通过docker commit手动构建镜像
格式:
docker commit 选项 容器名称 镜像名称:TAG
-a #作者 "姓名<邮箱>"
-c #对创建的映像应用Dockerfile指令
-m #提交信息
-p #在提交时暂停容器
步骤:
- 下载官方基础镜像
- 基于镜像启动容器
- 进入容器中做配置
- 提交为新镜像
- 基于的新镜像创建容器进行测试
利用Dockerfile文件执行docker build自动构建
常见指令
FROM #来自于哪个镜像
LABEL #指定镜像元数据,后面跟键值对
RUN #执行shell命令
ADD #复制文件,会自动解压
COPY #复制文件
ENV #设置环境变量
EXPOSE #暴露端口
CMD #容器启动命令
ENTRYPOINT #入口点,类似启动命令,但是不会被覆盖,而是追加
ARG #构建镜像时指定变量
STOPSIGNAL #docker stop时发送的信号,默认为9
USER #指定运行容器的用户,默认root
VOLUME #匿名卷,将本机/var/lib/docker/volumes/容器ID/_data挂载到容器指定目录
WORKDIR #指定工作目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录
ONBUILD #子镜像引用的指令,当使用此镜像创建新镜像时,出发此指令
HEALTHCHECK #健康检查
docker build命令构建镜像
docker build Dockerfile路径
#Dockerfile可以是本地路径,也可以是URL路径,还可设置为“-” ,从标准输入读取
-f #指定Dockerfile本地路径
--force-rm #总是删除中间层容器,创建镜像失败时,删除临时容器
--no-cache #不使用之前构建中创建的缓存
-q #不显示Dockerfile中RUN的输出结果
--rm=true #创建镜像成功时,删除临时容器
-t #设置注册名称、镜像名称、标签,格式为:<注册名称>/<镜像名称>:<标签>(标签默认为latest)
docker数据管理
docker默认会在容器删除后其所有数据也将被删除
数据持久保存方式:数据卷
特点:
- 类似于mount,将宿主机的目录或文件挂载到容器
- 在容器删除后数据仍可保留和使用
- 可与其他容器之间共享和重用
- 实时修改更新
数据卷分类
- 指定宿主机目录或文件:指定宿主机的具体路径和容器内的具体路径,做挂载关系,此方式不会创建数据卷
- 匿名卷:只指定容器内目录路径充当挂载点,docker自动指定宿主机的路径进行挂载,此方式会创建匿名数据卷,Dockerfile中VALIUME指定的卷即为此种
- 命名卷:指定数据卷的名称和容器路径的挂载关系,此方式会创建命名数据卷
数据卷使用方法
方式一
docker run -v [宿主机路径:]容器内路径[:权限ro/rw] 镜像名
#将宿主机目录挂载到容器内,两个目录都可以自动创建
方式二
docker run -v 容器内路径 镜像名
#匿名卷,只指定容器内路径,没有指定宿主机的路径信息,宿主机会自动生成/var/lib/docker/volumes/<卷IP>/_data目录,并挂载到容器内的指定路径
方式三
#命名卷将固定存放在/var/lib/docker/volumes/<卷名>/_data
#可以通过命令直接创建,如果没有事先创建,docker run时也会创建
docker volume create 卷名
docker run -v 卷名:容器内路径 容器名
删除匿名卷
docker rm 的-v选项可以在删除容器时,同时删除相关联的匿名卷
数据卷管理命令
docker volune 子命令
#子命令
create #创建数据卷
inspect #显示一个或多个卷的详细信息
ls #列出卷名称
proune #移除所有未使用的本地卷
rm #删除一个或多个卷
查看数据卷的挂载关系
docker inspect --format="{{.Mounts}}" 容器名
数据卷容器
需要先创建一个后台运行的容器作为server,用于提供数据卷,
docker run -d --name volume_server -v /data:/data centos
启动新容器,作为client,连接server的数据卷
docker run -d --name client1 --volumes-from volume_server nginx
数据卷容器是否在运行并不影响client的创建及使用
删除数据卷容器,将不能创建新的client,但不影响旧client使用
网络管理
默认
docker服务安装后会生成一个名为docker0的虚拟网卡默认IP为172.17.0.1/16
每次创建或删除容器时,都会增加或删除一个虚拟网卡
#容器外网卡名
veth08d5f26@if5
#容器内网卡名
eth0@if6
#查看容器创建后桥接状态
[root@docker-server /]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242374f2e60 no veth08d5f26
vethe85d047
容器间通信
同一个宿主机的不同容器默认可以互相通信
禁止容器间通信
#在service文件中添加选项参数--icc=false
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --icc=false
systemctl daemon-reload
systemctl restart docker
修改默认docker0网桥的网络配置
两种方法不可混用
方法1:
vim /etc/docker/daemon.json
#添加以下内容
"bip": "10.0.0.1/24"
#重启docker
systemctl daemon-reload
systemctl restart docker
方法2:
vim /lib/systemd/system/docker.service
#添加--bip=100.100.100.1/24
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=100.100.100.1/24
#重启docker
systemctl daemon-reload
systemctl restart docker
修改默认网络设置,使用自定义网桥
#安装bridge工具
yum -y install bridge-utils.x86_64
#添加网桥
brctl show
brctl addbr test0
ip a a 132.31.1.1/24 dev test0
#配置使用指定网桥
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -b test0
#重启docker
systemctl daemon-reload
systemctl restart docker
容器名称互联
因为容器在创建时地址时自动分配,并不固定,要想方便容器间进行通讯,就可以通过使用容器名称实现
容器名称实现
docker run -d --name web1 centos7.9.2009
docker run -it -d --link web1 centos7.9.2009 bash
[root@740a09ec920a /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
132.31.1.2 web1 b4a5909e5645
132.31.1.3 740a09ec920a
[root@740a09ec920a /]# ping web1
PING web1 (132.31.1.2) 56(84) bytes of data.
64 bytes from web1 (132.31.1.2): icmp_seq=1 ttl=64 time=0.119 ms
64 bytes from web1 (132.31.1.2): icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from web1 (132.31.1.2): icmp_seq=3 ttl=64 time=0.061 ms
^C
--- web1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
docker网络连接模式
docker五种网络模式
- none
- bridge
- host
- container
- network-name
默认自带三种模式
[root@docker-server ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8b7a72296bba bridge bridge local
9d013e8c8080 host host local
5e647579b4ce none null local
网络模式指定
新建的容器默认使用bridge模式
docker run --network <mode> 镜像
docker run --net=<mode> 镜像
#mode可以是以下的值
none
bridge
host
container:<容器名或ID>
<自定义网络名称>
默认网络模式bridge
也可称之为NAT模式,此模式创建的容器会给每一个容器分配一个IP,通过宿主机的虚拟网桥与外部通信,通过SNAT访问外网,通过DNAT使容器可被外部主机访问
此模式需要开启ip_forward功能
bridge网络模式特点:
- 网络资源隔离:不同宿主机之间无法直接通信,拥有独立的网络
- 自动获取IP地址
- 能够访问外网
- 可以使用DNAT使容器可被外网访问
修改默认bridge的网络配置
两种方法不可混用
方法1:
vim /etc/docker/daemon.json
#添加以下内容
"bip": "10.0.0.1/24"
#重启docker
systemctl daemon-reload
systemctl restart docker
方法2:
vim /lib/systemd/system/docker.service
#添加--bip=100.100.100.1/24
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=100.100.100.1/24
#重启docker
systemctl daemon-reload
systemctl restart docker
host模式
如果容器使用此模式,那么将不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址
host网络模式特点:
- 共享主机网络
- 网络性能无损耗
- 各容器间网络无隔离
- 端口不易管理
none模式
此模式启动的容器没有虚拟网卡,没有任何网络配置,默认无法与外界通信,需要手动添加配置,极少使用
container模式
此模式创建容器,需要指定一个已经存在的容器,与其共享网络,新创建的容器不会自己创建网络配置,而是与指定的容器共享IP和端口
自定义网络模式
除了以上的网络模式,也可以自定义网络,实现不同的集群应用的独立网络管理,且互不影响
创建自定义网络:
docker network create -d <mode> --subnet 网段/掩码 --gateway 网关 自定义网络名称
#模式不支持host和none模式
查看自定义网络信息:
docker network inspect 自定义网络名称或网络ID
Docker-compose
#选项说明:
-f,–file FILE #指定Compose 模板文件,默认为docker-compose.yml
-p,–project-name NAME #指定项目名称,默认将使用当前所在目录名称作为项目名。
--verbose #显示更多输出信息
--log-level LEVEL #定义日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi #不显示ANSI 控制字符
-v, --version #显示版本
#以下为命令选项,需要在docker-compose.yml|yaml 文件所在在目录里执行
config -q #查看当前配置,没有错误不输出任何信息
up #创建并启动容器
build #构建镜像
bundle #从当前docker compose 文件生成一个以<当前目录>为名称的json格式的Docker Bundle 备份文件
create #创建服务
down #停止和删除所有容器、网络、镜像和卷
events #从容器接收实时事件,可以指定json 日志格式
exec #进入指定容器进行操作
help #显示帮助细信息
images #显示镜像信息
kill #强制终止运行中的容器
logs #查看容器的日志
pause #暂停服务
port #查看端口
ps #列出容器
pull #重新拉取镜像,镜像发生变化后,需要重新拉取镜像
push #上传镜像
restart #重启服务
rm #删除已经停止的服务
run #一次性运行容器
scale #设置指定服务运行的容器个数(不能指定容器名和端口映射)
start #启动服务
stop #停止服务
top #显示容器运行状态
unpause #取消暂定
扩容,缩容:
docker-compose scale compose定义的service=3
#为0表示删除容器
docker-compose scale compose定义的service=0
docker-harbor
命令行登录:
docker login http://IP
#因为docker连接仓库默认需要证书认证,非HTTPS的需要添加信任,一般在/etc/docekr/daemon.json添加
[root@docker-server ~]# cat /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"registry-mirrors": ["https://yct1mrfl.mirror.aliyuncs.com"],
"dns": ["114.114.114.114", "119.29.29.29"],
"dns-search": [ "placjh.com" ],
"insecure-registries": ["http://192.168.1.120"] ##这一行
}
上传镜像:
连接仓库后才能上传镜像,如果不事先建立项目,上传镜像失败
#需要先修改镜像的名称才能上传
docker tag 镜像名:版本号 镜像仓库/项目名称/镜像名称:版本号
docker push 镜像仓库/项目名称/镜像名称:版本号
拉取镜像:
拉取镜像不需要登陆
docker pull 镜像仓库/项目名称/镜像名称:版本号
修改配置
#先进入部署目录,停止docker-harbor运行
docker-compose stop
#修改部署目录中的harbor.yml(或harbor.cfg)文件
vim harbor.yml
#更新配置
./prepare
#启动
docker-compose start