Dockerfile里RUN、CMD、ENTRYPOINT的区别

Dockerfile里RUN、CMD、ENTRYPOINT的区别

Docker常用命令集合

docker 命令流程

Docker命令大全

Docker images

列出本机主机上的镜像:

1
docker images

结果各项说明:

1
2
3
4
5
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

搜索镜像(运行该命令实质是去:https://hub.docker.com搜索了):

1
2
docker search [options] <keyword>
e.g.:docker search redis

Docker pull

获取镜像(下载镜像)

1
2
docker pull <imageName>[:TAG]
[:TAG]默认为latest

Docker rmi

删除和清理镜像

使用标签TAG删除

1
2
3
4
docker rmi [option] <imageName>[:TAG]
[:TAG]默认为latest
-f,-force: 强制删除镜像,即使有容器依赖它;
-no-prune: 不要清理未带标签的父镜像。

使用imageID删除

1
docker rmi <imageID>

Docker run

创建一个新的容器并运行一个命令:
docker run等价于先执行docker create命令,再执行docker start命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker run [options]
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i: 以交互模式运行容器,通常与-t同时使用;
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用;
--name="容器新名字": 为容器指定一个名称,没有名字默认就是ID;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
-e username="ritchie": 设置环境变量;
-v : 挂载数据卷
本地目录:容器目录

# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
对于所创建的bash容器,当用户使用`exit`命令退出 bash 进程之后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了。

Docker start|stop|restart

Docker ps

列出当前所有正在运行的容器:

1
2
3
4
5
6
docker ps [options]   (默认是当前正在运行的容器)
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n :显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。

Docker exec

在运行的容器中执行命令(可以用来进入容器)

1
2
3
4
5
6
7
8
9
docker exec [options] <容器ID 或 容器名称>
-t :分配一个伪终端
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开

# 通过 exec 命令对指定的容器执行 bash or sh:
docker exec -it <容器ID> /bin/bash
# or
docker exec -it <容器ID> /bin/sh

Docker logs

查看容器日志

1
2
3
4
docker logs -f -t --tail <行数> <容器ID>
-t :是加入时间戳
-f :跟随最新的日志打印
–-tail 数字 :显示最后多少条

Docker top

查看容器内运行的进程

1
docker top <容器ID>

Docker inspect

查看容器内部细节

1
docker inspect <容器ID 或 容器名称>

Docker cp

从容器内拷贝文件到主机上:

1
2
docker cp <容器ID>:<容器内路径> <目的主机路径>
e.g.:docker cp 0d32c7830086:/tmp/yum.log /home/lxy

从主机拷贝文件到容器内:

1
2
3
docker cp <目的主机路径> <容器ID>:<容器内路径>
# /lxy 文件夹需存在
docker cp a.txt 0d32c7830086:/lxy/b.txt

Docker rm

删除容器

1
docker rm <容器ID>

Docker命令流程图

使用Docker安装常用软件

自定义的SpringBoot项目

1
2
3
4
# 以交互模式启动一个容器,exit后会关闭容器
docker run -it -p 8005:8005 --name ms-demo-service ms-demo-service:1.0 /bin/bash
# 后台运行容器(脚本内不能加nohup 和 &)
docker run -d -p 8005:8005 --name ms-demo-service ms-demo-service:1.0

安装Mysql

1
2
3
4
5
6
7
8
9
# 搜索mysql镜像
docker search mysql
# 下载mysql镜像,下载的TAG是latest
docker pull centos/mysql-57-centos7
# –-name 指定容器名
# -p 设置对外映射对端.如果不设置,客户端工具可能无法连接,因为没有映射端口
# -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
# -d 后台运行容器,并返回容器ID
docker run -d -p 3306:3306 --name=docker_mysql -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

安装Redis

1
2
3
4
5
# 下载redis镜像,下载的TAG是latest
docker pull redis
# –-name 指定容器名
# -p 设置对外映射对端.如果不设置,客户端工具可能无法连接,因为没有映射端口
docker run -d -p 6379:6379 --name docker_redis redis

Docker 通过 Dockerfile 进行打镜像包,然后运行容器,然后进入容器

1
2
3
4
5
6
7
8
9
10
# 先准备Dockerfile,然后打包
docker build -t 镜像名称:版本号 .
# 将打好的镜像包保存成tar包
docker save -o 保存的名称.tar 镜像名称:版本号
# 运行(mysql为例)
docker run -d -p 3306:3306 --name=容器名称 -e MYSQL_ROOT_PASSWORD=123456 镜像名称:版本号
# 查询容器进程ID
docker ps|grep 容器名称
# 进入容器
docker exec -ti 容器ID /bin/sh