Docker常用命令

这里将高频使用的docker命令记录说明下,备忘

docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 如果是登录自定义源,增加域名的registry地址
docker login [x.xxx.com]

# Linux下查询docker服务状态
service docker status

# Linux下启动docker服务
service docker start

# 查看所有容器(包含未启动的)
docker ps -a
# 删除有容器
docker rm -f $(docker ps -aq)

# 创建一个容器,-P表示Docker随机映射一个端口到内部容器开放的端口,-p 8888:80 表示指定端口映射容器80
docker run -p 8888:80 -d --name "hellonginx" nginx:latest

# 进入docker容器bash
docker exec -it containerId bash

# 停止容器
docker stop containerId

# 删除容器
docker rm contaierId

# 查看所有镜像
docker images

# 删除所有镜像
docker rmi -f $(docker images -aq)

# 创建镜像,可以-o指定输出位置,注意可以指定多个tag,比如-t t1 -t t2
docker build -t toolkit:v1 .

# 推送镜像,支持包含仓库地址,比如私有源地址
docker push toolkit:v1

# 查看日志,比如没有正常启动,可以这样去查看
docker logs containerId --timestamps

# 输出镜像文件为tar包,镜像ID,镜像名称/TAG都可
docker save <imageId> -o <filename>.tar

docker-compose

官网:https://docs.docker.com/compose/reference/

1
2
3
4
5
# 启动编排服务,(default: docker-compose.yml), 注意-f如果有设置,一定放在前头,不要调换参数顺序
docker-compose -f marvel-docker-compose.yml up -d

# 重新创建容器 --force-recreate
docker-compose up -d --force-recreate [service]

常见问题说明

-p参数

端口映射写完整,比如-p 8888:80,不要用简写方式

端口格式为宿主端口:容器端口即HOST:CONTAINER

对于docker-compose中各个container的port配置也遵照上述格式

build支持URL

有时build镜像是发到私有仓库,这时build及push时需要加上网址,比如 docker build github.com/creack/docker-firefox

停止删除目标容器

1
docker ps -q --filter "name=hellonginx" | grep -q . && docker stop hellonginx && docker rm -fv hellonginx

Error: Permission denied

比如docker启动nginx后进行读且时报权限问题,原因是docker挂载的磁盘权限不足,解决办法是

1
chmod -R 777 volume/

为什么会出现权限不足,因为docker在运行时,对于外部的系统用户是docker而不是root,因此存在权限不足的可能性,具体可以查看对应磁盘目录的权限情况。

容器内访问宿主机服务

直接访问127.0.0.1是不可以的,需要配置网络才可以正常访问

https://static.1991421.cn/2022/2022-05-03-000011.png

docker-compose

进行如下配置,同时使用host.docker.internal代替本地IP地址进行访问

1
2
extra_hosts:
- "host.docker.internal:host-gateway"

.dockerignore/拷贝黑名单

不想拷贝进镜像文件,可以通过.dockerignore配置黑名单来解决

https://docs.docker.com/engine/reference/builder/#dockerignore-file

写在最后

以上命令可能改变或失效,最终以官方CLI为准,点击这里