Loading

docker容器的使用整理

2019/10/24, docker 19.03.4

摘要:docker 容器常用命令整理
gitbooks 文档

安装与卸载

Linux 脚本在线安装docker

配置

CentOS 修改 docker 源,编辑 /etc/docker/daemon.json 文件
最新可用镜像站查看国内的 Docker Hub 镜像加速器

sudo vim /etc/docker/daemon.json

写入如下内容(如果文件不存在请新建该文件):

{
    "registry-mirrors": [
        "https://docker.211678.top",
        "https://docker.13140521.xyz"
    ]
}

修改完成后重新载入以及重启:

sudo systemctl daemon-reload
sudo systemctl restart docker

镜像

直接拉取镜像:

docker pull nginx

列出镜像:docker image ls -a

删除镜像(501 是要删除镜像的 IMAGE ID 前三位):docker image rm 501

镜像导出,导出 nginx 镜像到当前目录 nginx.tar 中:

# 导出
docker save nginx > nginx.tar
# 导出并压缩
docker save nginx | gzip > nginx.tar.gz

镜像导入,导入当前目录中的 nginx.tar:

docker load < nginx.tar

容器操作

列出运行中的容器:docker psdocker container ls

列出所有容器,包括停止的: docker ps -a docker container ls -a

停止所有容器:docker stop $(docker ps -q)

删除所有容器:docker rm $(docker ps -aq)docker container prune

更新镜像:docker update --restart=always mysqltest

进入运行中的容器,当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符:

docker exec -it 9bc bash
//如果是alpine镜像,则需要使用:
docker exec -it 9bc /bin/sh

复制文件:

docker cp mysqld.cnf 667fe074ea4b:/etc/mysql/mysql.conf.d/

在容器中修改 apt 源并安装 vim 工具

cd /etc/apt/
echo "">sources.list
echo "deb http://mirrors.ustc.edu.cn/debian buster main">>sources.list
echo "deb http://security.debian.org/debian-security buster/updates main">>sources.list
echo "deb http://mirrors.ustc.edu.cn/debian buster-updates main">>sources.list
apt-get update
apt-get install vim

Dockerfile

镜像构建时,安装其他工具,案例:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
#安装ffmpeg工具(替换了阿里源,然后再安装)(centos8下无法使用该命令替换源)
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y ffmpeg \
    && apt-get clean && apt-get autoclean && apt-get autoremove \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY ./publish/ /app
#默认就是80端口,如果要别的端口,代码中要明确指定监听端口号
EXPOSE 80
ENTRYPOINT ["dotnet","WebMvc.dll"]

与 Dockerfile 同一目录下,构建 hdmsweb 镜像,hdmsweb 是自己命名的镜像名称,注意 hdmsweb 与.之间有个空格:

docker build -t hdmsweb .

docker-compose

docker-compose中拉取镜像:

docker-compose pull

docker-compose build镜像:

docker-compose build

docker-compose 启动容器,-d 是后台运行:

docker-compose up -d

docker-compose 查看日志:

docker-compose logs

docker镜像批量导入导出

脚本

#!/bin/bash
# 获取到 "image:tag" 格式的镜像名
IMG_NAME=`docker images | grep -v TAG | awk '{print $1":"$2}'`
 
# 定义镜像存放目录
DIR="~/images/exports"
if [ ! -d "$DIR" ]; then
  echo -e "\033[34m${DIR}\033[0m 不存在"
  mkdir -p "$DIR"
  echo -e "\033[34m${DIR}\033[0m 已创建"
else
  echo -e "\033[34m${DIR}\033[0m 已存在"
fi
echo "开始拉取最新镜像"
for IMAGE in $IMG_NAME
do
  echo -e "正在拉取最新 \033[33m${IMAGE}\033[0m" 
  docker pull $IMAGE
  echo -e "拉取最新完成 \033[33m${IMAGE}\033[0m"
  echo ""
done
echo "开始导出镜像"
for IMAGE in $IMG_NAME
do
  echo -e "正在保存 \033[33m${IMAGE}\033[0m"
  SAVE_NAME=`echo $IMAGE | awk -F: '{print $1"_"$2}' | sed 's/\//_/g'`
  docker save $IMAGE -o ${DIR}/${SAVE_NAME}.tar
  echo -e "已保存到 \033[34m${DIR}/\033[31m${SAVE_NAME}.tar\033[0m"
  echo ""
done

导入指定文件夹内的所有镜像

for i in `ls deploy/image_tar/*`;do docker load <$i;done

docker overlay2 磁盘空间清理

docker 使用时间久了,提示磁盘空间不足,检查发现/var/lib/docker/overlay2目录占满磁盘空间
参考该文章空间使用分析与清理,优化(清理日志)容器、关闭一些占用过大(未使用)的容器

posted @ 2019-10-24 22:27  kasnti  阅读(456)  评论(0编辑  收藏  举报