以下命令是平时自己在工作中整理的一些常用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版本号信息
docker info
docker version
#查看容器
docker ps
#查看所有容器
docker ps -a
#进入容器内部
docker exec -it 容器id bash
容器id:指的是上图中的CONTAINER ID
注意**:有些linux服务器可能不支持bash,可以换成sh试试
#查看容器挂载情况
docker inspect 容器id
#重启容器
docker restart redis
#停止容器
docker stop 容器id
#删除容器
docker rm 容器id
注意**:使用该命令前,一定要先停止该容器
#查看镜像
docker images
#搜索镜像
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 network ls
一般部署一个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