目录
- 基本概念
- 常用命令
- 使用docker compose启动脚本
- 创建自己的image
1. 下载一个image
从hub.docker.com下载一个image。
bash
docker pull [image name]
下载时指定image的tag。
bash
docker pull [image name]:<tag>
举例,下载postgre的tag为alpine3.19的image
bash
docker pull postgre:alpine3.19
2. 载入一个Image
启动一个新的container并载入指定的image。
bash
docker run -d [image name]
2.1 映射端口
启动redis镜像,把实际服务器上的port 6000绑定到docker container 的 6379 port。
bash
docker run -p 5432:5432-d postgre
2.2 指定redis的镜像tag
下面命令指定运行tag为alpine3.19,tag可以简单的理解为类似版本号的东西。
bash
docker run -p 5432:5432 -d postgre:alpine3.19
2.3 指定volume来达到数据的持续性
即container被停止时,里面被修改过的数据不会丢失。
bash
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data
指定volume的三种方式:
- Host Volume :指定在host上的存储位置和在image里的目录的对应关系,称为主机卷
-v [path in host]:[path in image] - Anonymous Volume :指定在image里需要被映射的目录,但不指定在host上的存储位置,使用docker的默认设置,称为匿名卷
-v [path in image] - Name Volume :指定在image里需要被映射的目录,使用docker的默认存储位置, 但给该存储的数据命名,称为命名卷,推荐使用。
-v [volume name]:[path in image]
2.4 使用环境变量
bash
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin
使用-e来指定环境变量的值,每个环境变量都要用-e来标识。每个image的环境变量定义都不同,因此需要到hub.docker.com上查询该image的文档。
2.5 指定使用的虚拟网络名字
如下命令,将启动的image连接到虚拟网络postgre-network。
bash
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin
--net postgre-network
2.6 指定container名字
bash
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin
--net postgre-network
--name postgre_db
3. 重启一个container
重启一个docker container.
bash
docker start [container name]
举例,启动名为my_container的容器。
bash
docker start my_container
4. 暂停一个container
暂停一个docker container.
bash
docker stop [container name]
举例,停止名为my_container的容器。
bash
docker stop my_container
5. 列出现有container
以下命令效果都一样
bash
docker ps
docker container ls
docker container ps
默认情况下,该命令只列出目前运行中的container,要列出停止的container,可以使用以下参数。
bash
docker ps -a
如果要显示出container的大小,可以使用以下参数。
bash
docker ps -s
6. 在运行中的Container中执行命令行
bash
docker exec [container name]
举例,查看在叫mycontainer的容器中,工作目录下的文件
bash
docker exec mycontainer ls
在叫mycontainer的容器中,在/tmp目录下生产一个名为execWorks的文件。
bash
docker exec -d mycontainer touch /tmp/execWorks
7. 实时显示Container的资源使用情况
bash
docker stats
这个命令默认只显示当前运行中的container的资源使用情况,要查看所有container的情况,可以使用以下参数
bash
docker stats -a
8. 移除指定Container
bash
docker rm [container name]
在移除container之前,首先要停止container的运行。如果要移除运行中的container,请使用以下参数。
bash
docker rm -f mycontainer.
移除container同时,也要移除相关联的volumes,使用以下参数。
bash
docker rm -v mycontainer
要释放所有的已停止的container,可以使用以下命令:
bash
docker container prune
9. 查看现存的image, image的属性
bash
docker images
执行这条命令后,系统就会列出所有现存的images,如下图。
由上图可见,每个image有repository, tag, image id三个属性。repository 属性在图形界面里又被称为name。
这里,要讲一下image的 image id和name/repository的区别。
image name/repository 是你在创建image是给他起的名字。不同的image是允许使用同样的image name的。比如,你可以重复生成叫做MyImage的image, 但是只有最后生成的那个才会获得latest的tag。你也可以通过给他们打上不同的tag以示区别。
image id 是你在创建image时系统自动为它生成的id,每个image id都是独一无二的,标识唯一的一个image。
9. 移除image
移除image时可以使用image id也可以使用image name。
bash
docker image rm [image name] or [image id]
docker rmi [image name] or [image id]
举例,移除名字叫myimage的最新生成的image。
bash
docker rmi myimage:latest
要注意的是,一个image可以被tag两个不同的name,着这种情况下,需要解除image和name和tag的绑定,才可以移除image。
举例,Image ID为5164fcc90073的image同时被tag了两个不同的名字,image1:latest和image2:latest, 当我们执行以下命令,仅解除了这个image和image1:latest.
bash
docker rmi image1:latest
此时,这个image仅于image2:latest绑定,执行以下命令,会解绑该image和image2:latest并删除这个image。
bash
docker rmi image2:latest
持续更新中