常用命令
镜像的命令
查看所有镜像
docker images
只显示镜像 ID
docker images -q
搜索镜像,和在 docker hub 搜索镜像一样
docker search mysql
下载镜像
docker pull
删除镜像
docker rmi
容器的命令
运行容器
docker run 参数 image
参数说明
-
--name="name"
给容器起个名字 -
-d
以后台方式运行 -
-it
以交互方式运行 -
-p
指定容器的端口-p 容器端口
-p 宿主机端口:容器端口
-
-P
大写P,随机端口
启动并进入容器
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 4 months ago 209MB
[root@master ~]# docker run -it centos /bin/bash
[root@bd538f39c881 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@bd538f39c881 /]# exit
exit
[root@master ~]# ls
[root@master ~]#
查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
显示最近创建的容器
docker ps -n
只显示容器的 ID
docker ps -q
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd538f39c881 centos "/bin/bash" About an hour ago Exited (0) About an hour ago elegant_elbakyan
[root@master ~]# docker ps -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd538f39c881 centos "/bin/bash" About an hour ago Exited (0) About an hour ago elegant_elbakyan
[root@master ~]# docker ps -aq
bd538f39c881
退出容器
退出并停止容器
exit
退出但不停止容器
control + p + q
停止、启动、重启容器
停止运行中的容器
docker stop 容器id
启动已停止的容器
docker start 容器id
重启运行中的容器
docker restart 容器id
删除容器
docker rm 容器id
查看容器日志
docker logs 参数 容器id
参数
-
-f
实时日志 -
--tail number
显示指定行数 -
-t
显示时间戳
查看容器中的进程
docker top 容器id
查看 docker 的详细信息
docker inspect 容器id
进入容器
docker exec -it 容器id 命令
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd6d05a53924 centos "/bin/bash" 36 minutes ago Up 36 minutes awesome_diffie
[root@master ~]# docker exec -it fd6d05a53924 /bin/bash
[root@fd6d05a53924 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
从容器内拷贝文件到宿主机
docker cp 容器id:文件路径 目标路径
[root@master ~]# docker exec -it fd6d05a53924 /bin/bash
[root@fd6d05a53924 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@fd6d05a53924 /]# cd home
[root@fd6d05a53924 home]# ls
[root@fd6d05a53924 home]# touch test_cp.py
[root@fd6d05a53924 home]# exit
exit
[root@master ~]# ls
[root@master ~]# docker cp fd6d05a53924:/home/test_cp.py .
[root@master ~]# ls
test_cp.py
[root@master ~]#
把容器提交为新的镜像
[root@master ~]# docker commit -m="add webapps" -a="answer" 15492c58c446 tomcat02:0.1
sha256:24a0db125365a955abae90cafa2bd0ff783fb3bf3a8c1b3bb06dd339ce1cf4f7
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 0.1 24a0db125365 6 seconds ago 672MB
启动一个 nginx 容器
拉取镜像
docker pull nginx
查看镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 62d49f9bab67 2 days ago 133MB
启动容器
-
-d
后台运行 -
--name nginx01
给容器取名:nginx01 -
-p 3344:80
宿主机的端口 3344 : 容器的端口 80 -
nginx
镜像名称
docker run -d --name nginx01 -p 3344:80 nxinx
访问
curl locathost:3344
可以看到
Welcome to nginx!
启动一个 tomcat 容器
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
curl localhost:3355
可以看到
HTTP Status 404 – Not Found
进入容器,可以看到 webapps 目录是空的,因为阿里云默认使用精简版
[root@master ~]# docker exec -it tomcat01 /bin/bash
root@39287264ae30:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@39287264ae30:/usr/local/tomcat# cd webapps
root@39287264ae30:/usr/local/tomcat/webapps# ls
root@39287264ae30:/usr/local/tomcat/webapps#
继续
root@39287264ae30:/usr/local/tomcat/webapps# cd ..
root@39287264ae30:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@39287264ae30:/usr/local/tomcat# cd webapps.dist/
root@39287264ae30:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@39287264ae30:/usr/local/tomcat/webapps.dist# cd ..
root@39287264ae30:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@39287264ae30:/usr/local/tomcat# cd webapps
root@39287264ae30:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@39287264ae30:/usr/local/tomcat/webapps# exit
exit
测试
[root@master ~]# curl localhost:3355
可以看到
Apache Tomcat/9.0.45
可视化
Portainer
Docker 图形化界面管理工具
启动
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
浏览器访问
宿主机ip:8088
容器数据卷
如果数据都在容器中,那么容器删除,数据就会丢失。
将容器中的数据,同步到宿主机。
方式一:使用 -v
挂载
-v 宿主机目录:容器目录
[root@master ~]# cd /home/
[root@master home]# ls
test_cp.py
[root@master home]# docker run -it -v /home/test:/home centos /bin/bash
[root@80f768d25851 /]# cd home/
[root@80f768d25851 home]# ls
[root@80f768d25851 home]# touch test_volum.py
[root@80f768d25851 home]# exit
exit
[root@master home]# ls
test test_cp.py
[root@master home]# cd test
[root@master test]# ls
test_volum.py
[root@master test]#
[root@master test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@master test]# ls
test_volume.py
[root@master test]# vim test_volume.py
[root@master test]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80f768d25851 centos "/bin/bash" 13 minutes ago Exited (0) 6 minutes ago awesome_tesla
[root@master test]# docker start 80f768d25851
80f768d25851
[root@master test]# docker attach 80f768d25851
[root@80f768d25851 /]# cd home/
[root@80f768d25851 home]# ls
test_volume.py
[root@80f768d25851 home]# cat test_volume.py
hello
[root@80f768d25851 home]#
启动一个 MySQL
docker pull mysql:5.7
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 --name mysql01 mysql:5.7
参数说明:
-
-d
后台运行 -
-p
指定端口 -
-v
挂载数据目录 -
-e
环境变量 -
--name
容器名称
[root@master home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 --name mysql01 mysql:5.7
69bb40b3e7bbc6149f99cd3cd17c198fdabc9a5bdbe8cd0fc4f9c84f7beb8a06
[root@master home]# ls
mysql test test_cp.py
[root@master home]# cd mysql/
[root@master mysql]# ls
conf data
[root@master mysql]# cd data/
[root@master data]# ls
auto.cnf ca-key.pem ca.pem client-cert.pem client-key.pem ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema private_key.pem public_key.pem server-cert.pem server-key.pem sys
删除容器,宿主机中的数据仍然保留
[root@master data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69bb40b3e7bb mysql:5.7 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
[root@master data]# docker stop 69bb40b3e7bb
69bb40b3e7bb
[root@master data]# docker rm 69bb40b3e7bb
69bb40b3e7bb
[root@master data]# ls
auto.cnf ca-key.pem ca.pem client-cert.pem client-key.pem ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema private_key.pem public_key.pem server-cert.pem server-key.pem sys
[root@master data]#
方式二:使用在 dockerfile 使用 VOLUME 挂载
vim dockerfile1
FROM centos
VOLUME ["volume1", "volume2"]
CMD echo "end"
CMD /bin/bash
docker build -f dockerfile1 -t mycentos:0.1 .
启动容器
docker run -it 87b2df5c7bb0 /bin/bash
可以看到容器内挂载的目录
[root@76303fbcb383 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@76303fbcb383 /]# exit
查看容器的详细信息
docker inspect 76303fbcb383
通过 Mounts 字段可以看到挂载信息
"Mounts": [
{
"Source": "/var/lib/docker/volumes/bc13741cae8d3adae4b0aab90f9f82bf2b0e647a20856fd7f426781c4ce9db9c/_data",
"Destination": "volume1",
},
{
"Source": "/var/lib/docker/volumes/7a4ad4719df0a613b8a48900761db0ec5fbd6d39d962af7390ad31bfce8e3cad/_data",
"Destination": "volume2",
}
],
容器与容器之间数据同步
[root@master ~]# docker run -it --name container1 87b2df5c7bb0
[root@2ca2d156346b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@2ca2d156346b /]# ls[root@master ~]#
[root@master ~]#
[root@master ~]# docker run -it --name container2 --volumes-from container1 87b2df5c7bb0
[root@8a64e695517e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@8a64e695517e /]# [root@master ~]#
[root@master ~]#
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a64e695517e 87b2df5c7bb0 "/bin/sh -c /bin/bash" About a minute ago Up About a minute container2
2ca2d156346b 87b2df5c7bb0 "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes container1
[root@master ~]# docker exec -it container1 /bin/bash
[root@2ca2d156346b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@2ca2d156346b /]# cd volume1/
[root@2ca2d156346b volume1]# ls
[root@2ca2d156346b volume1]# touch hello.py
[root@2ca2d156346b volume1]# ls
hello.py
[root@2ca2d156346b volume1]# exit
exit
[root@master ~]# docker exec -it container2 /bin/bash
[root@8a64e695517e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@8a64e695517e /]# cd volume1
[root@8a64e695517e volume1]# ls
hello.py
[root@8a64e695517e volume1]# exit
[root@8a64e695517e volume1]# exit
exit
[root@master ~]#
DockerFile
指令
基础镜像
FROM
维护者
MAINTAINER
添加内容
ADD
将文件拷贝到镜像中
COPY
环境变量
ENV
镜像构建的时候,需要做什么
RUN
镜像的工作目录
WORKDIR
数据挂载目录
VOLUME
暴露的端口号
EXPOSE
容器启动的时候运行的命令,只有最后一个会生效,而且可以被替代
CMD
容器启动的时候运行的命令,可以追加命令
ENTRYPOINT
构建一个新的 centos 镜像
编写 dockerfile
vim dockerfile1
FROM centos
MAINTAINER answer
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum install vim -y
RUN yum install net-tools -y
EXPOSE 80
CMD echo $MYPATH
CMD echo "end"
CMD /bin/bash
构建镜像
docker build -f dockerfile1 -t newcentos:1.0 .
运行
[root@master dockerfile]# docker run -it newcentos:1.0
[root@8d82303293e1 local]# pwd
/usr/local
CMD 和 ENTRYPOINT 的区别
vim test_cmd
FROM centos
CMD ["ls", "-a"]
docker build -f test_cmd -t testcmd .
运行
[root@master dockerfile]# docker run testcmd
.
..
.dockerenv
bin
dev
etc
home
lib
略...
可以看到启动容器,并且执行了 ls -a
如果在运行容器的时候,追加一个参数 l
,使容器启动并执行 ls -al
docker run testcmd -l
会报错,因为会用 -l
替换掉 ls -a
[root@master dockerfile]# docker run testcmd -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
再来看下 ENTRYPOINT
vim test_entrypoint
FROM centos
ENTRYPOINT ["ls", "-a"]
docker build -f test_entrypoint -t testentrypoint .
[root@master dockerfile]# docker run testentrypoint
.
..
.dockerenv
bin
dev
略...
追加参数运行,是可以的
[root@master dockerfile]# docker run testentrypoint -l
total 56
drwxr-xr-x 1 root root 4096 Apr 17 11:10 .
drwxr-xr-x 1 root root 4096 Apr 17 11:10 ..
-rwxr-xr-x 1 root root 0 Apr 17 11:10 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Apr 17 11:10 dev
略...
[root@master dockerfile]# cat test_entrypoint
FROM centos
ENTRYPOINT ["ls", "-a"]
制作一个 Tomcat 镜像
-
准备 Tomcat 压缩包和 JDK 压缩包
[root@master tomcat]# pwd /home/dockerfile/tomcat [root@master tomcat]# ls apache-tomcat-9.0.45.tar.gz jdk-8u281-linux-x64.tar.gz [root@master tomcat]# touch readme.md [root@master tomcat]# ls apache-tomcat-9.0.45.tar.gz jdk-8u281-linux-x64.tar.gz readme.md
vim Dockerfile
FROM centos MAINTAINER answer COPY readme.md /usr/local/readme.md ADD jdk-8u281-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.45.tar.gz /usr/local/ RUN yum install vim -y WORKDIR /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_281 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/bin/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/lib EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.45/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.45/logs/catalina.out
docker build -t newtomcat .
docker run -d -p 8080:8080 --name mytomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-9.0.45/webapps/test -v /home/dockerfile/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.45/logs newtomcat
Docker 网络
删除所有容器,使用:
docker rm -f $(docker ps -aq)
删除所有镜像,使用:
docker rmi -f $(docker images -aq)
网络模式
-
bridge 桥接模式(默认)
容器1 eth0 容器2 eth0
veth| | veth
docker0 | 宿主机 eth0
-
host 和宿主机共享网络
容器1 eth0 容器2 eth0
| |veth | docker0 | |
宿主机 eth0
-
container 容器网络连通
容器1 eth0 -- 容器2 eth0
veth|
docker0
|
宿主机 eth0
none 不配置网络
在宿主机上查看网络地址:
ip addr
可以看到,宿主机
eth0
和 Docker
docker0
启动一个 Tomcat 容器
docker run -d -P --name tomcat01 tomcat
查看容器内部的网络地址
docker exec -it tomcat01 ip addr
可以看到,容器内的网卡
94: eth0@if95
启动容器之后,再查看一下宿主机的网络地址
ip addr
可以看到,多了一个
95: veth948bb03@if94
宿主机多出来的这个网卡,和容器内的网卡是一对虚拟网卡。每启动一个容器,就会成对出现一对虚拟网卡。
再启动一个 Tomcat 容器
docker run -d -P --name tomcat02 tomcat
然后看一下宿主机的网络地址,可以看到,多了一个
97: veth6211866@if96
然后看一下 tomcat02 容器的网络地址,可以看到与宿主机上面成对的虚拟网卡
96: eth0@if97
容器之间也是可以 ping 通的
docker exec -it tomcat02 ping tomcat01的ip
docker0 通过成对的虚拟网卡 veth 找到对应的容器。
测试 host 模式
启动一个容器,tomcat01 ,使用 host 模式
docker run -d --name tomcat02 --network host tomcat
查看宿主机的网络地址
ip addr
查看 tomcat01 的网络地址,发现容器 tomcat1 和宿主机的网络地址,完全一样
docker exec -it tomcat01 ip addr
测试 container 模式
启动一个 tomcat 容器,tomcat02,使用默认的 bridge 模式
docker exec -it tomcat01 ip addr
再启动一个 tomcat 容器,tomcat03,使用 container 模式
docker run -it -d --name tomcat03 --network container:tomcat02 tomcat /bin/bash
查看 tomcat02 和 tomcat03 的网络地址,发现两个容器的网络地址,完全一样
docker exec -it tomcat02 ip addr
docker exec -it tomcat03 ip addr
--link
再启动一个 tomcat 容器 tomcat03,添加 --link
参数
docker run -d -P --name tomcat03 --link tomcat02 tomcat
启动成功之后,可以使用容器名称 ping tomcat02
docker exec -it tomcat03 ping tomcat02
自定义网络
让容器使用自己创建的网络,而不是 docker0
创建
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
查看
docker network ls
可以看到
NETWORK ID NAME DRIVER SCOPE
172e0e7e1cc4 bridge bridge local
cbda15f5f707 host host local
90a69af90650 mynet bridge local
62686a15ab53 none null local
查看
docker network inspect mynet
可以看到
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
启动两个 tomcat ,指定使用自己创建的网络
docker run -d -P --name tomcat01 --net mynet tomcat
docker run -d -P --name tomcat02 --net mynet tomcat
不用使用 --link
参数,直接使用容器名 ping,也可以 ping 通
docker exec -it tomcat01 ping tomcat02
网络连通
前面创建的 tomcat01 和 tomca02 使用的是自己创建的网络 mynet
现在再启动两个 tomcat 容器,tomcat03 和 tomcat 04,使用默认的 docker0 网络
docker run -d -P --name tomcat03 tomcat
docker run -d -P --name tomcat04 tomcat
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fc11602276a tomcat "catalina.sh run" 41 seconds ago Up 40 seconds 0.0.0.0:32775->8080/tcp tomcat04
0c8e848c7141 tomcat "catalina.sh run" 48 seconds ago Up 48 seconds 0.0.0.0:32774->8080/tcp tomcat03
c176da0abbcb tomcat "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:32773->8080/tcp tomcat02
4dbe9800ee75 tomcat "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:32772->8080/tcp tomcat01
[root@master ~]#
现在使用 tomcat03 ping tomcat02 是不行的
[root@master ~]# docker exec -it tomcat03 ping tomcat02
ping: tomcat02: Name or service not known
把 tomcat03 连接到 mynet ,这样 tomcat02 这个容器,就有了两个 ip 地址
docker network connect mynet tomcat03
再试一下,就可以了
[root@master ~]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from tomcat02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.055 ms
Docker Compose
Compose 是 Docker 官方的开源项目,用于定义、运行多个容器,使用 YAML 配置文件。
使用三个步骤:
- 定义 Dockerfile
- 定义 docker-compose.yml
- 运行 docker-compose up
安装
下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
下载完成之后,查看一下,/usr/local/bin
目录下有 docker-compose
表示下载成功
cd /usr/local/bin/
[root@master bin]# ls
chardetect cloud-id cloud-init cloud-init-per docker-compose easy_install easy_install-3.6 jsondiff jsonpatch jsonpointer jsonschema
授权
sudo chmod +x /usr/local/bin/docker-compose
验证一下
docker-compose version
试玩
-
创建项目目录
cd /home mkdir composetest cd composetest/
-
创建
app.py
vim app.py
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count)
-
创建依赖文件
vim requirements.txt
flask redis
-
创建 Dockerfile
vim Dockerfile
FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt EXPOSE 5000 COPY . . CMD ["flask", "run"]
-
创建 docker-compose.yml
vim docker-compose.yml
version: "3.9" services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
-
启动
docker-compose up
-
浏览器访问
宿主机ip:5000
可以看到
Hello World! I have been seen 1 times.
退出:
CTRL+C
查看一下
容器
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1cb56e501eb5 composetest_web "flask run" 8 minutes ago Up 8 minutes 0.0.0.0:5000->5000/tcp composetest_web_1
c5bb4070402e redis:alpine "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 6379/tcp composetest_redis_1
镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest 5e92df4e8e8d 11 minutes ago 182MB
python 3.7-alpine c46f62f378d7 4 days ago 41.6MB
redis alpine d6121e6a8ceb 4 days ago 32.3MB
网络
[root@master ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
172e0e7e1cc4 bridge bridge local
cbfd10c9cd59 composetest_default bridge local
cbda15f5f707 host host local
62686a15ab53 none null local