容器是docker的另一个核心概念。
是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。也许虚拟机是模拟运行的一整套操作系统(提供了运行环境和其他系统环境),那么docker容器就是独立运行的一个或一组应用,以及它们的必需运行环境
可以使用docker ps -a -q查看处于终止状态的容器的id
查看运行的容器
docker ps [-a] [-l]
以守护形式运行容器:
docker run -i -t IMAGE /bin/bash
Ctrl +p Ctrl+Q
附加到运行中的容器
docker attach 容器名
启动守护式容器:
docker run -d 镜像名[command][ARG…]
参数 -d是以后台运行
docker top NAME 命令查看容器运行状态
在运行的容器内启动新进程
docker exec [-d][-i][-t] 容器名 [COMMAND][ARG…]
docker top 查看运行容器的内容
停止守护式容器
docker stop 容器名
会发送命令到容器,然后结束
docker kill 容器名
直接杀死容器进程
守护式容器总结
CTRL +p CTRL +Q 快捷键,将交互式的容器转到后台
docker run -d 如何启动守护式容器
docker logs 查看守护式容器log信息
设置容器的端口映射
端口映射实现访问容器应用
在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的
当容器中运行一些网络应用时,要让外部访问到这些应用时,可以通过-P或-p参数来指定端口映射。-P会随机指定一个端口至容器内部开放的网络端口
sudo docker run -d -P training/webapp python app.py
此时可以看到主机的32768被映射到了容器的5000端口。访问宿主机的32768可以访问容器内应用提供的界面。
http://127.0.0.1:32768
映射所有接口地址
使用hostPort:ContainerPort将本地的5000端口映射到容器的5000端口,命令如下:
sudo docker run -d -p 5000:5000 training/webapp python app.py
此时默认会绑定本地所有接口的所有地址,多次使用-p可以绑定多个端口。如:
sudo docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
映射到指定地址的任意端口
使用ip:hostPort:containerPort格式指定映射一个特定地址,比如localhost地址 127.0.0.1;:
sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python python app.py
映射到指定地址的任意端口
使用ip::containerPort绑定loclhost的任意端口的5000端口,本地主机会自动分配一个端口:
sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py
还可以使用udp标记来指定udp端口:
sudo docker tun -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
使用docker port 来查看当前映射的端口配置,也可以查看绑定的地址:
sudo docker port [CONTAINER ID]
如图
容器互联实现容器间通信
自定义容器命令
使用 --name如:
docker run -d -p --name web training/webapp python app.py
使用ps查看
也可以使用docker inspect 来查看容器的名字
sudo docker inspect -f “{{.Name}}” d175140432
在执行run时可以加–rm参数,此参数的作用是在容器终止后会立即删除,-d和–rm不能同时使用
使用 --link 参数可以让容器之间安全进行交互
栗子:
先创建一个新的数据库容器:
sudo docker run -d --name db training/postgres
然后创建一个新的web容器,并将它连接到db容器:
sudo docker run -d -p --name web --link db:mydb tarining/webapp python app.py
–link 参数的格式为 --link name:alias,其中name是要连接的容器的名字,alias 是这个连接的自定义别名
使用env命令查看web容器的环境变量:
sudo docker run --rm --name web2 --link db:db training/webapp env
其中MYDB_开头的是供web容器连接db容器使用,前缀采用大写的连接别名。
处了环境变量,Docker还添加host信息到父容器/etc/hosts
最后两排的hosts信息,第一个是是mydb容器的ip和主机名
第二个是web容器,web容器用自己的id作为默认主机名
可以在web容器中安装ping命令来测试与db容器的连通: