Docker常用命令整理

Docker部署jar包运行

方式一:

1-上传jar到服务器的指定目录

2-在该目录下创建Dockerfile 文件

1
2
3
4
5
FROM java:8
MAINTAINER laiqiaobo
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]
  • from java:8 拉取一个jdk为1.8的docker image

  • maintainer 作者是laiqiaobo

  • demo-0.0.1-SNAPSHOT.jar就是你上传的jar包,替换为jar包的名称

  • demo.jar 是你将该jar包重新命名为什么名称,在容器中运行

  • expose 该容器暴露的端口是多少,就是jar在容器中以多少端口运行

  • entrypoint 容器启动之后执行的命令,java -jar demo.jar 即启动jar

3-创建好Dockerfile文件之后,执行命令 构建镜像:

1
2
// 注意最后的 `.`  表示 Dockerfile 文件在当前目录下 abc是构建之后镜像名称
docker build -t abc .

4-镜像构建成功之后,就可以运行容器了

1
2
3
docker run -d --restart=always --name demo -p 8080:8080 abc
这个表示docker容器在停止或服务器开机之后会自动重新启动
--restart=always -p 宿主端口:容器端口

方式二

运行一个jdk的容器,然后挂载其中的目录到宿主机,然后运行之后,就可以将需要运行的jar放在宿主机的挂载目录下,然后每次重新运行docker容器即可。每次发布只需要替换宿主机中的jar包即可。

1-准备 jdk1.8的镜像

2-构建容器, 并映射本地目录

1
2
3
4
5
docker run -d --restart=always -v /C/develop/server:/jar  -p 8000:8001 --name=cdemo   primetoninc/jdk:1.8 java -jar -Duser.timezone=GMT+08 /jar/mybatis.jar

-v 宿主机目录:docker中的目录,在win10下 /C/代表c盘
primetoninc/jdk:1.8 镜像名:版本号
java -jar -Duser.timezone=GMT+08 /jar/mybatis.jar 启动命令

常用命令

1
2
3
4
5
6
7
8
9
10
docker ps     // 查看运行中的容器
docker ps -a // 查看所有容器
docker rm xxx // 删除名为xxx的容器
docker start xxx // 启动xxx容器
docker stop xxx // 停止容器
docker stats 命令查看实际情况
docker exec -it bfc6039f87f7 /bin/bash //进入某个容器内部

// 修改容器的可用内存大小
docker update -m 300m --memory-swap 1g bfc6039f87f7

参数解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-d: 后台运行容器,并返回容器ID;
--name="nginx-lb": 为容器指定一个名称;
-p: 指定端口映射 主机端口:容器端口
-m :设置容器使用内存最大值,例如: -m 1g 或者 -m 300M
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--memory="300m" --memory-swap="1g" 代表可使用内存300m,memory-swap为1g
-m 300M --memory-swap -1 代表可使用内存300m,memory-swap为不设上限,
如果值相同,则不能使用swap

docker run 或者 docker update
--cpuset-cpus="" # 允许使用的 CPU 集合
例:--cpuset-cpus "0,6" --cpuset-cpus "0-5"
-c,--cpu-shares=0 # CPU 共享权值(相对权重)
--cpu-period=0 # 限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
即调度周期,多久重新分配一次cpu
--cpu-quota=0 # 限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
设置在每个周期内容器能使用的 CPU 时间。例如:4核cpu中,调度1s, 配额2s,相当于用50%cpu
设置容器在一个调度周期内能使用的 CPU 时间时实际上设置的是一个上限。并不是说容器一定会使用这么长的 CPU 时间。
--cpuset-mems="" # 允许在上执行的内存节点(MEMs),只对 NUMA 架构有效

docker run 和 docker start 区别

  • docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。 相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

  • docker start的作用是,重新启动已存在的镜像,可以使用docker ps找到容器的信息。

开启阿里云加速

docker的镜像仓库在国外,下载会很慢,启用阿里云加速。

/etc/docker目录下创建daemon.json文件,添加如下内容

1
2
3
{
"registry-mirrors": ["https://almtd3fa.mirror.aliyuncs.com"]
}

https://almtd3fa.mirror.aliyuncs.com 为阿里云的加速地址。修改后,重启docker:

1
2
systemctl daemon-reload
service docker restart
文章作者: GeYu
文章链接: https://nuistgy.github.io/2023/03/12/Docker常用命令整理/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yu's Blog