Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
下面的图片比较了容器技术和传统的虚拟化技术的对比,可见容器时在操作系统的基础上实现虚拟化,传统的虚拟化技术还需要一层guest OS系统做为基础实现。
官方文档:https://docs.docker.com/get-docker/
Docker的安装文档清晰明了可以直接去按照他给的步骤一步一步来。
卸载旧版本以及残留
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
设置docker的yum软件仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
设置docker开机自启并启动
sudo systemctl enable --now docker
运行一个docker的测试镜像来验证docker的安装
[root@docker ~]# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
docker search 镜像名称
[root@docker ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16597 [OK]
bitnami/nginx Bitnami nginx Docker Image 121 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 39
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 17 [OK]
rancher/nginx-ingress-controller 10
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
bitnami/nginx-exporter 2
circleci/nginx This image is for internal use 2
默认从dockerhub进行搜索镜像
docker pull 名称:版本
[root@docker ~]# docker pull nginx:1.21.6
1.21.6: Pulling from library/nginx
c229119241af: Pull complete
2215908dc0a2: Pull complete
08c3cb2073f1: Pull complete
18f38162c0ce: Pull complete
10e2168f148a: Pull complete
c4ffe9532b5f: Pull complete
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:1.21.6
docker.io/library/nginx:1.21.6
如果不加版本的话则拉取latest版本即最新版本
docker images
docker image ls
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.21.6 12766a6745ee 10 days ago 142MB
rancher/mirrored-flannelcni-flannel v0.17.0 9247abf08677 5 weeks ago 59.8MB
rancher/mirrored-flannelcni-flannel-cni-plugin v1.0.1 ac40ce625740 2 months ago 8.1MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.23.0 e6bf5ddd4098 4 months ago 135MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.23.0 37c6aeb3663b 4 months ago 125MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.23.0 56c5af1d00b5 4 months ago 53.5MB
registry.aliyuncs.com/google_containers/kube-proxy v1.23.0 e03484a90585 4 months ago 112MB
registry.aliyuncs.com/google_containers/etcd 3.5.1-0 25f8c7f3da61 5 months ago 293MB
registry.aliyuncs.com/google_containers/coredns v1.8.6 a4ca41631cc7 6 months ago 46.8MB
registry.aliyuncs.com/google_containers/pause 3.6 6270bb605e12 7 months ago 683kB
五列数据分别代表镜像名称、镜像版本、镜像id、拉取时间、镜像大小
docker tag [imagesID] 改后名称:改后tag
[root@docker ~]# docker tag nginx:1.21.6 mynginx:1.21.6
[root@docker ~]# docker images |grep nginx
mynginx 1.21.6 12766a6745ee 10 days ago 142MB
nginx 1.21.6 12766a6745ee 10 days ago 142MB
docker rmi 镜像id
[root@docker ~]# docker rmi mynginx:1.21.6
Untagged: mynginx:1.21.6
docker save 镜像id/镜像名 > 名字.tar
[root@docker ~]# docker save nginx:1.21.6 > nginx-v1.21.6.tar
[root@docker ~]# ls
nginx-v1.21.6.tar
docker load < 包名
[root@docker ~]# docker rmi nginx:1.21.6
Untagged: nginx:1.21.6
Untagged: nginx@sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Deleted: sha256:12766a6745eea133de9fdcd03ff720fa971fdaf21113d4bc72b417c123b15619
Deleted: sha256:3ea962f6f388096ab9798790d363fc6f9c779c924a5eddf5c699d8da080114f7
Deleted: sha256:091a2aef7242e42505b69f1ad027d6a442cfce2403e260ac914f0fd6cc2d275f
Deleted: sha256:4e72a31f1cd6fd655cc0826c91e886967b6e965e13ac21f31f9f66c27a3b7732
Deleted: sha256:e3d1cdf9772a260b3e81a22c1940d63ac45dfe67720f78f00ca73834d9498934
Deleted: sha256:af40da71a8618ea9cbcdc333d5e60bd5b6df820f0d07a55f7c9a1c21fd930095
Deleted: sha256:608f3a074261105f129d707e4d9ad3d41b5baa94887f092b7c2857f7274a2fce
[root@docker ~]# docker load < nginx-v1.21.6.tar
608f3a074261: Loading layer [==================================================>] 83.9MB/83.9MB
ea207a4854e7: Loading layer [==================================================>] 62MB/62MB
33cf1b723f65: Loading layer [==================================================>] 3.072kB/3.072kB
5c77d760e1f4: Loading layer [==================================================>] 4.096kB/4.096kB
fac199a5a1a5: Loading layer [==================================================>] 3.584kB/3.584kB
ea4bc0cd4a93: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:1.21.6
[root@docker ~]# docker images |grep nginx
nginx 1.21.6 12766a6745ee 10 days ago 142MB
Docker run [options] image [command] [arg]
Option说明:
-d 后台运行
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输出终端,通常与-i同时使用
--name 设置容器名字
--net 指定网络连接类型
--h 设置主机名称
--dns 指定容器的dns服务器,默认和宿主一致
-e 设置环境变量(**=”**”)
-p 本地端口:容器端口 把容器的某个端口暴露到主机的某个端口
-v 本地目录:容器目录 把主机的某目录挂载到容器的目录里面实现文件系统的链接
--network 指定网络
--rm 容器关闭后自动删除
使用命令:"docker run -p 8080:80 -d --name nginx1 nginx"来运行一个nginx容器并且把容器的80端口暴露到本机的8080
[root@docker ~]# docker run -p 8080:80 -d --name nginx1 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
1fe172e4850f: Pull complete
35c195f487df: Pull complete
213b9b16f495: Pull complete
a8172d9e19b9: Pull complete
f5eee2cb2150: Pull complete
93e404ba8667: Pull complete
Digest: sha256:859ab6768a6f26a79bc42b231664111317d095a4f04e4b6fe79ce37b3d199097
Status: Downloaded newer image for nginx:latest
4cf61416ee672b595b99436d0fdcf8ebe5e6d22adaed8838b29e978f19372ecb
容器的创建过程是先到自己本地来找镜像,如果没有则去dockerhub镜像仓库拉取镜像之后再运行
使用命令:"docker ps"来查看已经启动的容器,如果有停止运行的容器可以添加’-a’参数来查看
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1
使用命令:"docker stop {容器ID|容器名称}"来关闭容器
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx "/docker-entrypoint.…" 6 minutes ago Exited (0) 4 seconds ago nginx1
58e6c5af6efe hello-world "/hello" 12 hours ago Exited (0) 12 hours ago great_chatterjee
使用命令:"docker start {容器ID|容器名称}"来开启容器
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx "/docker-entrypoint.…" 7 minutes ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1
使用命令:"docker restart {容器ID|容器名称}"来重启容器
使用命令:“docker exec -it {容器ID|容器名称} /bin/sh"来进入容器,后面”/bin/sh"是指定进入容器时用的终端,如果容器内有其他的可以自行修改
[root@docker ~]# docker exec -it nginx1 /bin/sh
# exit
[root@docker ~]# docker exec -it nginx1 /bin/bash
root@4cf61416ee67:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@4cf61416ee67:/# exit
exit
使用命令:"docker rm {容器ID|容器名称}"来删除已经关闭的容器,如果容器在运行中想要强制删除可以加’-f’参数进行强制删除
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cf61416ee67 nginx "/docker-entrypoint.…" 15 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx1
[root@docker ~]# docker rm -f nginx1
nginx1
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
使用命令:"docker logs {容器ID|容器名称}"来查看容器运行时的日志
[root@docker ~]# docker run -p 8081:80 -d --name myweb nginx
497eff031c03927f17fe14fcff49bea832403687d580294c42f9cfba697a1564
[root@docker ~]# docker logs myweb
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/05/02 05:30:57 [notice] 1#1: using the "epoll" event method
2022/05/02 05:30:57 [notice] 1#1: nginx/1.21.6
2022/05/02 05:30:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/05/02 05:30:57 [notice] 1#1: OS: Linux 4.18.0-348.el8.0.2.x86_64
2022/05/02 05:30:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/05/02 05:30:57 [notice] 1#1: start worker processes
2022/05/02 05:30:57 [notice] 1#1: start worker process 32
2022/05/02 05:30:57 [notice] 1#1: start worker process 33
使用命令:"docker commit {容器ID|容器名称} 镜像名称"来打包容器,如果容器在运行中可以使用-p参数
[root@docker ~]# docker commit -p myweb myweb:v1.0
sha256:05f5efa5b56fd3d9c6d17b74ee4a3e9866095ac8cc681879dda21b9b7a968859
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myweb v1.0 05f5efa5b56f 4 seconds ago 142MB
nginx latest fa5269854a5e 11 days ago 142MB
hello-world latest feb5d9fea6a5 7 months ago 13.3kB
使用命令"docker inspect {容器ID|容器名称}"来查看容器的详细信息
他会列出很多很多信息 我这里举例筛选出容器的IP看一下
[root@docker ~]# docker inspect myweb|grep IP
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
复制指令,从上下文目录中复制到容器里面
用法:
COPY [–chown=用户:组] 源路径 容器目的路径
–chown可以不使用
ADD和COPY使用格式类似 同样需求下官方是推荐使用COPY
运行命令
用法:
RUN 命令
类似与Run 与RUN不同的是 CMD是在docker run 的时候执行 而RUN是在dockerfile构建镜像的时候执行
用法和RUN一样
类似CMD参数,但其不会被docker run的命令参数覆盖用法和RUN、CMD一样(当dockerfile存在多个此参数的时候只会执行最后一个)
改变环境变量,定义环境变量。
ENV key value
和ENV效果一样但是只会在dockerfile构建的时候生效 构建好容器之后不生效
定义默认挂载数据卷 当运行容器的时候如果没有定义位置会自动挂载
VOLUME 路径 路径
声明端口 当使用-P运行容器的时候就是映射的这个端口
EXPOSE 端口
指定工作目录 就是链接的时候的默认目录
WORKIDIR 目录
用来指定执行后续命令的用户
USER 用户
写好Dockerfile文件之后使用命令"docker build 镜像名称:版本 dockerfile的目录"来构建
[root@docker ~]# mkdir dockerfile
[root@docker ~]# cd dockerfile/
[root@docker dockerfile]# vim dockerfile
[root@docker dockerfile]# cat dockerfile
FROM nginx
RUN echo '我是dockerfile构建的容器' > /usr/share/nginx/html/index.html
[root@docker dockerfile]# docker build -t mynginx:v1.0 ./
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
---> fa5269854a5e
Step 2/2 : RUN echo '我是dockerfile构建的容器' > /usr/share/nginx/html/index.html
---> Running in d73c0f94b402
Removing intermediate container d73c0f94b402
---> 4650cd039883
Successfully built 4650cd039883
Successfully tagged mynginx:v1.0
[root@docker dockerfile]# docker images |grep mynginx
mynginx v1.0 4650cd039883 10 seconds ago 142MB
Docker网络是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络无法直接访问到容器,从而实现网络的隔离。
启动容器时使用host模式,那这个容器将不会获得一个独立的ip,而是和宿主机共用一个ip,容器将不会虚拟出自己的网卡,而是使用宿主机的ip和端口,但是容器其他方面,比如文件系统,进程系统都是独立。
启动容器时使用Container使用的时候需要指定一个容器id或者容器名称,这个模式会和指定的容器共享同一个ip,和host一样除了ip是共享对应容器的ip之外,容器的其他方面,比如文件系统,进程系统都是独立的。
启动容器时使用None,Docker容器将不会生成网卡,也就是说容器会没有网卡,ip,路由等信息。需要我们自己来添加。这种网络情况只会又一个lo回环网卡。
当docker服务启动的时候,会在主机上创建一个docker0的虚拟网卡,此主机默认启动的容器都会链接到这个虚拟网卡上。类似与vmwar 的一个虚拟网络。
使用命令:"docker network ls"来列出所有当前网络
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
68b3fda03c16 none null local
docker network create 参数 网络名称
-d:网路模式
–subnet:指定网段
–gateway:指定网关(指定虚拟网卡得ip)
自定网络可以支持很多东西 比如不需要dns可以通过容器名来互相ping同
比如我用network create了一个网络 并且创建了两个容器 os1,os2 使用os1pingos2的时候会互通 不需要配置任何的dns 他会自动寻找 默认的docker0则就没有这个功能
[root@docker ~]# docker network create -d bridge --subnet 192.168.1.0/24 --gateway 192.168.1.254 mynetwork
5fb087dccbabedf4b97fcc09b448ee717acbfa35fc520698985f536dea8be5e7
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
5fb087dccbab mynetwork bridge local
68b3fda03c16 none null local
使用命令:"docker rm {网络ID|网络名称}"
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
5fb087dccbab mynetwork bridge local
68b3fda03c16 none null local
[root@docker ~]# docker network rm mynetwork
mynetwork
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac3a791d7c38 bridge bridge local
cb275e88b131 host host local
68b3fda03c16 none null local
docker network connect 命令是用于将docker容器 连接/断开 到某个网络中,或者与其他容器 建联/断开,容器可以使用容器名或者容器ID。
用法:
docker network connect/disconnect {网络ID|网络名称} {容器ID|容器名称}
使用命令:"docker network inspect {网络ID|网络名称}"来查询网络的详细信息
[root@docker ~]# docker network create -d bridge --subnet 192.168.1.0/24 --gateway 192.168.1.254 mynetwork
af5233ce4e299130cadee1bc8c9754b576bfb63d6ac229ad7856a653b2109e1e
[root@docker ~]# docker network inspect mynetwork
[
{
"Name": "mynetwork",
"Id": "af5233ce4e299130cadee1bc8c9754b576bfb63d6ac229ad7856a653b2109e1e",
"Created": "2022-05-02T02:44:46.644429172-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.1.0/24",
"Gateway": "192.168.1.254"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
Docker Compose可以轻松,高效的管理容器,他是一个用于定义和运行多个容器的docker的应用程序工具。在生产环境中一个应用肯定有很多个docker容器构成,而就单纯的docker一次性只能实现单个容器的部署,为了这个问题,docker compose 应运而生。
官方下载文档:https://docs.docker.com/compose/install/
docker默认不自带docker-compose工具,需要自己手动去下载
[root@docker ~]# curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 664 100 664 0 0 1412 0 --:--:-- --:--:-- --:--:-- 1412
100 25.2M 100 25.2M 0 0 239k 0 0:01:48 0:01:48 --:--:-- 365k
[root@docker ~]# chmod +x /usr/bin/docker-compose
[root@docker ~]# docker-compose -v
Docker Compose version v2.4.1
使用docker-compose需要在目录里定义一个名称为"docker-compose.yml"的yml文件,这个文件就是用来定义服务配置的之后可以使用docker-compose来管理这个文件里定义的资源。
官方文档:Docker-Compose
docker-compose up
在当前目录定义好docker-compose的yml文件之后可以使用此命令来运行,默认在前台运行可以追加"-d"参数使其运行在和后台。
docker-compose restart
重启全部定义的容器资源
docker-compose stop
停止运行定义的容器
docker-compose down
停止并删除对应的容器
#全局配置层
version: 3 #版本
services:
##定义层
app1:
##配置层
image: nginx:1.26 #镜像
ports:80:80 #端口映射
environment: aa=bb #系统环境
volumes: #挂载卷定义
networks: #网络定义
app2:
app3:
...
这个版本需要和docker的版本相对应具体对应信息可去官网查看版本对照
在配置层定义,如果自己定义了dockerfile想让docker-compose来运行可以直接使用build来构建。
version: "3"
services:
myapp:
build: .
在配置层定义,用来指定镜像
version: “3”
services:
myapp:
image: nginx
在配置层定义,修改容器启动时执行的命令
version: "3"
services:
myapp:
image: centos
command: ["bash"]
在配置层定义,默认docker-compose启动容器的名称格式为<项目名称><服务名称><序号>,这个参数可以直接修改容器的名字
version: "3"
services:
myapp:
container_name: myapp
image: centos
command: ["bash"]
在配置层定义,定义容器的环境变量
version: "3"
services:
myapp:
container_name: mySQL
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: aaaaaa
在配置层定义,和environment一样用来定义环境变量,他这个是指定一个文件,直接使用environment来定义环境变量可能会有一些敏感信息不适合直接放在docker-compose里使用,env_file可以指定一个环境文件,文件格式为键值对的方式key=value
version: "3"
services:
myapp:
container_name: mySQL
image: mariadb
env_file:
- ./env
[root@boychai docker-compose]# cat env
MYSQL_ROOT_PASSWORD=aaaaaaa
在配置层定义,用来配置启动关系,配置了之后里面写其他服务容器的名称,只有里面定义容器启动后,自己才会启动,可以理解为服务容器启动的前提条件。
version: "3"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql
在配置层定义,用来配置重启策略,模式如下
**no:**是默认的重启策略,在任何情况下都不会重启容器
**always:**容器总是重新启动
**on-failure:**在容器非正常退出时(退出状态非0),才会重启容器
**unless-stopped:**在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
version: "3"
services:
web:
restart: always
build: .
depends_on:
- db
- redis
redis:
restart: always
image: redis
db:
restart: always
image: mysql
在配置层定义,用来把主机的数据卷或着文件挂载到容器里。如下
version: "3"
services:
myapp:
image: nginx:latest
volumes:
- "/usr/nginx/html:/usr/share/nginx/html"
- "/var/log/nginx:/var/log/nginx"
也可以在全局层进行一个生命,然后配置层进行调用,如下
version: "3"
services:
myapp:
image: nginx:latest
volumes:
- nginx_html:/usr/share/nginx/html
- nginx_log:/var/log/nginx
volumes:
- nginx_html: /usr/nginx/html
- nginx_log:/var/log/nginx
网络配置,默认不声明的话docker会自动生成一个默认的bridge类型的网络,在全局配置层定义一个networks,如下配置
version: "3"
services:
myapp:
image: nginx:latest
networks:
default:
driver: bridge
定义默认网络模式为bridge,如果容器不指定则全部使用或者bridge
我们还可以自定义一个网络名字,之后在容器的配置层进行绑定这个名词
version: "3"
services:
myapp:
image: nginx:latest
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
也可以绑定已存在的网络
version: "3"
services:
myapp:
image: nginx:latest
networks:
- mynetwork
networks:
mynetwork:
external:
name: network-test
关于docker-compose的配置有很多,我这里只是介绍了部分常用的配置,更多具体的配置可以去官网进行查看更多配置
这里使用docker-compose的方式部署一个WordPress的博客,提供配置参考学习使用。
官方教程
[root@boychai wp]# cat > docker-compose.yml <