文章

Docker进阶

Docker进阶

volume

匿名绑定
1
docker run -d --name nginx --rm -p 80:80 -v /usr/share/nginx/html nginx

容器删除后数据卷会随之删除

实名绑定
1
docker run -d --name nginx --rm -p 80:80 -v nginx:/usr/share/nginx/html nginx

容器删除后数据卷不会删除

文件夹映射
1
docker run -d --name nginx --rm -p 80:80 -v /www/nginx:/usr/share/nginx/html nginx

Network

bridge模式

image-20241106234724618

可以使用--link单向链接到指定容器

Host模式

image-20241106235005342

container模式

image-20241106235453813

自定义网络
1
docker network create --driver bridge --subnet 10.1.2.0/24 --gateway 10.1.2.1 demo
1
docker run -itd --network demo --rm --name centos1 centos

两台容器都链接上互相ping:

image-20241107000903703

不同网络的链接问题

image-20241107002940480

image-20241107002508643

本质上相当于为容器1新链接了一个网卡

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 基础镜像
FROM centos

# 作者信息
MAINTAINER masterke<masterke.cn>

# 标签
LABEL version="1.0"
LABEL description="我的第一个Dockerfile"

# 环境变量
ENV JAVA_ENV=dev APP_NAME=test

# 要执行的shell命令
RUN mkdir -p /www/dockerfile/test

# 将主机指定文件复制到容器目标位置
ADD /etc/hosts /etc/hosts

# 设置容器中的工作目录,如果目录不存在将会自动创建
WORKDIR /the/workdir/path
RUN pwd

# 数据卷绑定
VOLUME [ "/www/docekrfile/test" ]

# 暴露端口
EXPOSE 80/tcp

# CMD(会被覆盖)和ENTRYPOINT(不会被覆盖)任选其一,构建完成后执行的命令
CMD ping 127.0.0.1
ENTRYPOINT ping 127.0.0.1

Registry

阿里云私有镜像服务
1
https://cr.console.aliyun.com/cn-hangzhou/instances
Harbor镜像仓库
Nexus镜像仓库

Docker-compose

https://www.runoob.com/docker/docker-compose.html

1
2
3
4
5
6
7
8
9
10
11
12
version: '1.0'
services:
  nginx-demo:
    image: nginx:latest
    container_name: my_nginx
    restart: always
    ports:
      - 80:80
    volumes:
      - /opt/nginx:/usr/share/nginx/html
    environment:
      - APP_ENV=dev
本文由作者按照 CC BY 4.0 进行授权