Docker常用命令

Docker 不管是在企业生产中,还是个人小项目中,应用都非常的方便且简单快捷,开始学习一些Docker的常见用法:

列出本地的镜像

1
docker images -a

搜索mysql的镜像

1
docker search mysql --limit 10

拉取到本地,版本号可选。若不带版本号,默认是latest

1
2
3
docker pull mysql
docker pull ubuntu
docker pull redis:6.0.8

列出本地镜像的image_id

1
docker images -q

列出docker目前的磁盘占用情况

1
2
3
4
5
6
➜  ~ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 0 72.78MB 72.78MB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B

删除本地镜像

1
2
3
4
5
6
7
8
9
10
11
12
➜  ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ba6acccedd29 2 months ago 72.8MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
➜ ~ docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ba6acccedd29 2 months ago 72.8MB

新建并启动容器

-it 代表 interactive tty

1
docker run -it --name=myu1 ubuntu /bin/bash

列出当前运行的docker

1
docker ps -a

使用docker run -it启动的容器,自动进入交互式命令行,退出有两种方式:

  • exit命令(容器停止运行)
  • 快捷键ctrl+p+q(容器继续后台运行)

docker run和docker start的区别:

docker run是使用镜像启动一个新的容器,而docker start是启动之前存在的容器。

删除已经停止的容器

1
docker rm container_id / name

进入活动状态的容器

1
docker attach container_id/name

上面命令如果使用exit退出,会使容器停止

想要退出时候保持后台运行,可以按快捷键control+p+q (control按住不放,先后按下p和q)

1
docker exec container_id

上面命令进入,使用exit退出,不会使容器退出

容器传文件到宿主机(在宿主机执行)

1
docker cp container_id:/file/to/path 

把整个容器导出为一个tar包

1
docker export container_id > ~/abcd.tar

从导出包导入容器

1
cat ~/abcd.tar | docker import - 用户名/镜像名字:版本号

把修改好的container进行commit

1
docker commit -m="add vim for ubuntu" -a="mapxn" d99969a97223 ubuntu-vim:1.0.1

发布到阿里云的私有仓库

1
docker push registry.cn-shanghai.aliyuncs.com/mpn/dkdk:1.0.1

挂载容器数据卷

1
docker run -it --privileged=true -v ~/repo/docker:/tmp:ro ubuntu /bin/bash

跑一个mysql实例

1
2
3
4
5
6
docker run -d -p 3306:3306 --privileged=true \
-v ~/repo/docker/mysql/log:/var/log/mysql \
-v ~/repo/docker/mysql/data:/var/lib/mysql \
-v ~/repo/docker/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql
宿主机 容器
端口 3306 3306
日志目录 ~/repo/docker/mysql/log /var/log/mysql
数据目录 ~/repo/docker/mysql/data /var/lib/mysql
配置目录 ~/repo/docker/mysql/conf /etc/mysql/conf.d

配置~/repo/docker/mysql/conf/my.cnf

1
2
3
4
5
6
$ cat my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重启mysql容器。

运行一个postgresql实例

1
2
3
4
5
docker run -d --name postgres \
-p 5432:5432 \
-e POSTGRES_PASSWORD=123456 \
-v ~/repo/docker/postgres-data/:/var/lib/postgresql/data \
postgres

查看容器占用的磁盘大小

1
docker system df -v

docker列出虚悬镜像

1
docker image ls -f dangling=ture

删除虚悬镜像

1
docker image prune

查看docker网络

1
docker network ls

docker 安装portainer

1
2
3
4
5
6
7
8
9
docker run -d \
-p 8000:8000 \
-p 9000:9000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

docker 安装tomcat

1
2
3
4
docker run -d \
-p 8080:8080 \
--name tomcat \
tomcat

docker 安装 nginx (开启文件服务器)

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir -p ~/repo/docker/nginx/www
docker run --name nginx -p 8888:80 -d nginx
docker cp nginx:/etc/nginx/conf.d ~/repo/docker/nginx
docker cp nginx:/etc/nginx/nginx.conf ~/repo/docker/nginx
docker rm -f nginx

docker run -d \
--name nginx \
-v ~/repo/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v ~/repo/docker/nginx/conf.d:/etc/nginx/conf.d \
-v ~/repo/docker/nginx/www:/home/www \
-p 8888:80 \
nginx

docker 安装frps

1
2
3
4
5
6
docker run \
--restart=always \
--network host \
-v ~/docker/frp:/etc/frp \
--name frps \
-it snowdreamtech/frps

docker 查看正在运行的容器日志

1
docker logs -f