文章目录

  • 前言
  • docker服务
  • docker容器
  • docker镜像
  • docker网络
  • 实战脚本分析
  • 额外知识点


前言

以下命令是平时自己在工作中整理的一些常用docker命令,评论区大家可以讨论。

docker服务

#重启docker服务
systemctl restart docker
#停止docker服务
systemctl stop docker
#查看docker服务是否启动
ps -ef |grep docker
#启动docker服务
systemctl start docker
#设置docker随服务启动而自启动
systemctl enable docker
#查看docker运行状态
systemctl status docker

docker拉取容器 EOF docker拉取容器启动容器脚本_docker拉取容器 EOF

查看docker版本号信息

docker info

docker拉取容器 EOF docker拉取容器启动容器脚本_容器_02

docker version

docker拉取容器 EOF docker拉取容器启动容器脚本_jar_03

docker容器

#查看容器
docker ps

docker拉取容器 EOF docker拉取容器启动容器脚本_docker_04

#查看所有容器
docker ps -a
#进入容器内部
docker exec -it 容器id bash

容器id:指的是上图中的CONTAINER ID
注意**:有些linux服务器可能不支持bash,可以换成sh试试

#查看容器挂载情况
docker inspect 容器id

docker拉取容器 EOF docker拉取容器启动容器脚本_jar_05

#重启容器

docker restart redis
#停止容器
docker stop 容器id
#删除容器
docker rm 容器id

注意**:使用该命令前,一定要先停止该容器

docker镜像

#查看镜像
docker images

docker拉取容器 EOF docker拉取容器启动容器脚本_运维_06

#搜索镜像

docker search 镜像名id

镜像名id:图中IMAGE ID

#停止镜像
docker stop 镜像id/镜像名
#删除镜像
docker rmi 镜像id/镜像名

注意**:使用该命令之前,必须将该镜像停止

#强制删除镜像
docker image rm 镜像名称/镜像ID
#拉取镜像
docker pull redis
#保存镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
#加载镜像
docker load -i 镜像保存文件位置

docker网络

#查看docker网络
docker network ls

docker拉取容器 EOF docker拉取容器启动容器脚本_docker_07

实战脚本分析

一般部署一个java项目会用到两个脚本:一个默认的Dockerfile加上一个创建容器镜像的.sh脚本

Dockerfile文件内容如下(示例):

# 这里使用的是jdk8镜像
FROM java:8

ADD example-server-0.0.1-SNAPSHOT.jar app.jar

RUN sh -c 'touch /app.jar'

ENV TZ='Asia/Shanghai'
ENV JAVA_OPTS=''

VOLUME /tmp

EXPOSE 8080

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Dspring.profiles.active=$profiles -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

上面需要注意的一个地方是:ADD 后面跟的是我们自己打包的jar包

.sh脚本内容:

#!/usr/bin/env bash

#########################################################################
#                                                                       #
#                  docker环境执行脚本                        #
#                                                                       #
#########################################################################

# 保持工作目录正确
cd `dirname $0`
FROM java:8

docker stop example-server && docker rm example-server

# 
docker build -t example-server .


docker run --detach \
           --name example-server \
           --restart always \
           --publish 8080:8080 \
           --volume /opt/volume/server/example-server/config:/config \
           --volume /opt/volume/server/example-server/logs:/opt/volume/server/example-server/logs \
           --volume /opt/volume/statics:/opt/statics \
           example-server

如上是一个部署服务时用到的一个脚本内容,下面开始解析:
docker stop 每次执行脚本都会去停止容器并删除
docker build -t 构建镜像
–name 服务名
–publish 端口号(前面是暴露给外部的端口,后面则是docker容器端口)
–volume 自己设置的配置文件、日志、静态页面、文件、图片访问路径

额外知识点

一、平时遇到docker环境和服务器本地时间不一致解决方法
1.进入到容器内部后,执行以下命令:
#执行命令

echo Etc/UTC+8 > /etc/timezone

2.运行 docker run 添加 -v /etc/localtime:/etc/localtime 选项,如下:

docker run -d -p 80:80 -v /etc/localtime:/etc/localtime nginx

3.复制时区信息到容器

docker cp /etc/localtime nginx:/etc/localtime

注意**:要保证当前服务器的时区正确

若本服务器时区不正确,用如下:

docker cp /usr/share/zoneinfo/Asia/Shanghai nginx:/etc/localtime

二、docker在运行期间会产生一些.json日志文件,如果不处理,可能会造成磁盘爆满
以下是解决方案:

1.新建/etc/docker/daemon.json,有就不用新建了。添加log-dirver和log-opts参数,样例如下:

{
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "live-restore": true,
        "log-driver":"json-file",
        "log-opts": {"max-size":"200m", "max-file":"1"}
	}

max-size=100m,意味着一个容器日志大小上限是200m,大小可以自己调节
max-file=1,意味着一个容器只保留1个日志,分别是id+.json,这里可以设置多个

2.重启docker的守护线程

systemctl daemon-reload

	systemctl restart docker.service

注意**:新创建的容器会生效,原有的不会,如果想要原有的也生效,需要重启整个docker