端口映射

前文中,我们创建了一个container并运行了简单的Python Flask web 应用。

# docker run -d -p 5000:5000 training/webapp python app.py
Unable to find image 'training/webapp' locally
Pulling repository training/webapp
31fa814ba25a: Download complete 
511136ea3c5a: Download complete 
f10ebce2c0e1: Download complete 
82cdea7ab5b5: Download complete 
5dbd9cb5a02f: Download complete 
74fe38d11401: Download complete 
64523f641a05: Download complete 
0e2afc9aad6e: Download complete 
e8fc7643ceb1: Download complete 
733b0e3dbcee: Download complete 
a1feb043c441: Download complete 
e12923494f6a: Download complete 
a15f98c46748: Download complete 
Status: Downloaded newer image for training/webapp:latest
276dcd3d9a277b604a3b7b3a99052c7511c2a8f9774a8ca70d5043741a8b8673

启动container并将端口5000映射到host的5000端口

Docker container 协作

Docker有一个Linking系统,允许多个container协同工作,互相发送链接信息。当2个container链接时,可以由其中某一台向另一台发送信息。

container 命名

Docker使用container的名字来创建链接。
启动container的时候,可以使用默认命名,也可以使用--name来手动命名

# docker run -d -p 5000:5000 --name="web" training/webapp python app.py

运行 docker ps 可以看到启动了一个名为 web 的container

# docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS              PORTS                    NAMES
be66d08de541        training/webapp:latest   "python app.py"     41 seconds ago      Up 39 seconds       0.0.0.0:5000->5000/tcp   web

container连接

再新启动一个db的container

# docker run -d --name="db" training/postgres
2ba6ed92ed36db90582d637797228d703ed0c1686664775ad200eef52aaa861c

连接两个container

# docker run -d -p 5000:5000 --name="web" --link db:db training/webapp python app.py  
345e4002f031598ce4fc7da0edd0ad84990da88cf325ccb46a68956770669044

结果

# docker ps
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS              PORTS                    NAMES
9ec4237961f9        training/webapp:latest     python app.py          4 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp   web                 
6153f738de6a        training/postgres:latest   su postgres -c '/usr   16 seconds ago      Up 15 seconds       5432/tcp                 db,web/webdb

看到后面,NAMES显示 db,web/webdb,但是执行

# docker inspect -f "" web

<no value>

不知道是否算是成功,期待下次测试