image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。
使用docker的过程差不多就是操作image和container的过程,他们大致关系如图:
其中dockerFile会另外再说。
查看容器
$ docker container ls [OPTIONS]
OPTIONS:
-a: 查看所有容器,包括正在运行和已经停止的容器
注意:容器即使停止了,容器依然是存在的,如果修改了dockerFile文件,想要使新配置生效,需要将容器删除
删除容器
$ docker rm container_id
container_id: 可以使用docker ps查看
启动容器
$ docker run [OPTIONS] image
OPTIONS:
1. --name=container_name: 指定启动后的容器名称
2. -p: 绑定宿主机转发容器的端口
3. -v: 宿主机与容器的文件映射
4. -e: 环境变量
5. -i: 以交互模式运行容器,通常与 -t 同时使用
6. -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
7. -d: 后台运行容器,并返回容器ID
7. --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致
8. link=连接名:容器名称 : 添加链接到另一个容器
9. --expose=[]: 开放一个端口或一组端口
注意:
1. 如果容器中没有服务,即便使用了-d参数,启动后也会直接退出,所以容器必须有nginx、php-fpm这样的服务启动
2. 使用link参数可以使两个容器间使用link的值进行连接通信
示例:php-fpm容器和mysql容器
// 启动mysql容器,并将容器命名为mysql
docker run --name mysql -p 3306:3306 -v ~/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -itd develop/mysql
// 启动php-fpm容器,并将容器命名为php-fpm
docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v ~/develop:/www --privileged=true -d develop/php
启动两个服务后,在连接mysql的时候,可以使用link的值,如下
$pdo = new PDO("mysql:host=mysql;port=3306;dbname=test", 'root', '123456');
在连接时,host可以不用ip,直接使用link指定的容器即可。