陈佳浩
陈佳浩
发布于 2024-06-26 / 25 阅读
0
0

docker使用

  • 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 #在提交时暂停容器

步骤:

  1. 下载官方基础镜像
  2. 基于镜像启动容器
  3. 进入容器中做配置
  4. 提交为新镜像
  5. 基于的新镜像创建容器进行测试

利用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默认会在容器删除后其所有数据也将被删除

数据持久保存方式:数据卷

特点:

  1. 类似于mount,将宿主机的目录或文件挂载到容器
  2. 在容器删除后数据仍可保留和使用
  3. 可与其他容器之间共享和重用
  4. 实时修改更新

数据卷分类

  • 指定宿主机目录或文件:指定宿主机的具体路径和容器内的具体路径,做挂载关系,此方式不会创建数据卷
  • 匿名卷:只指定容器内目录路径充当挂载点,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

评论