Docker Tips

2021-08-10  本文已影响0人  Lyudmilalala

1. 当前用户不用sudo就可以使用docker命令

需要sudo的原因:docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户

sudo groupadd docker    # 如果没有docker用户组,创建一个
sudo gpasswd -a ${USER} docker   # 将当前用户添加到docker用户组
sudo gpasswd -a <username> docker    # 将指定用户添加到docker用户组
sudo systemctl restart docker    # 重启docker服务
sudo chmod a+rw /var/run/docker.sock    # 添加访问和执行权限

2. 各种创建后台运行的容器(防启动后终止)

映射卷轴时最好用全局路径,以免相对路径指向docker默认全局prefix下的相对路径
ubuntu 初始化容器

docker run -itd --name ubuntu-test -v D:\SpinQKit\spinqkit:/opt/spinqkit ubuntu:latest /bin/bash

mysql 初始化容器

docker run -itd --name mysql-test -p 4406:3306 
                  -e MYSQL_ROOT_PASSWORD=123456 
                  -v /home/mysql_data:/var/lib/mysql    # mysql数据文件地址
                  -v /home/mysql_init:/docker-entrypoint-initdb.d    # 初始化地址
                  -v  /home/mysql_conf:/etc/mysql/conf.d    # 配置文件地址
                  mysql:5.7

redis 初始化容器

docker run -itd--name redis-test -p 6379:6379  -p 18088:8088
                  -v /home/redis/logs:/opt/redis.log 
                  -v /home/redis/data:/opt/data 
                  -v /home/redis/conf/redis.conf:/opt/redis.conf
                  --privileged=true   # 提升容器内权限
                  –appendonly yes   # 开启数据持久化
                  redis redis-server /opt/redis.conf 

zookeeper 初始化容器

docker run -itd --name zookeeper-test -p 2181:2181 --restart always zookeeper

3. 其他增删查改小技巧

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

查看容器详情

docker inspect <container_id>;

通过shell进入正在运行的容器,进行调试

docker exec -it mysql-test /bin/bash

删除所有已经停止运行的容器

docker rm $(docker ps -qf status=exited)
# 或者
docker container prune

删除容器

docker rm -f $DOCKER_ID_OR_NAME   # 强制删除
docker rm -v $DOCKER_ID_OR_NAME   # 删除挂载的卷
docker container prune   # 删除所有停止运行的容器

4. log

跟踪显示日志

docker logs -f $DOCKER_ID_OR_NAME 

查看某容器自某时起的最新10条日志

docker logs --since="2021-11-26" --tail=10 $DOCKER_ID_OR_NAME 

5. 镜像

从Dockerfile生成镜像

// get into the directory of Dockerfile
docker build -t <image_name>:<image_tag> .

将容器转化为镜像

docker commit (-a <my_name>) -m <comment> <container_id_or_name> <image_name>:<image_version>
// e.g. docker commit -m "SpinQ Jenkins Test" 3d039cd7ebbf spinq-jenkins

复制镜像并重命名(常在上传镜像添加用户名时使用)

docker tag <image_name>:<image_tag>  <user_name>/<image_name>:<image_tag>
// e.g. docker tag grpc-server-java:1.0.0 lyudmilalala/grpc-server-java:1.0.0

查看悬挂中的镜像

docker image ls -f dangling=true

删除某个镜像
需要携带tag,不带tag默认为latest

docker rmi <image_id>:<image_tag>
docker rmi -f <image_id>:<image_tag>    # 强制删除

删除悬挂中的镜像

docker image rm $(docker image ls -f dangling=true -q)

或者

docker image prune

上传镜像到docker hub

  1. Docker Hub注册账号,并创建一个和你想要的镜像同名的repository

    1.png
    2.png
  2. 本机登录账号

$ docker login -u <user_name> -p <user_password>
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
  1. 如果本地镜像命名没有账号名前缀的话,需要将镜像重命名
docker tag grpc-server-java:1.0.0 lyudmilalala/grpc-server-java:1.0.0
  1. 将本地镜像推上repository
$ docker push lyudmilalala/grpc-server-java:1.0.0
The push refers to repository [docker.io/lyudmilalala/grpc-server-java]
0f80b451fce4: Pushed 
bff9fe6e429c: Mounted from library/openjdk 
7c245b2fe4f1: Mounted from library/openjdk 
f9e18e59a565: Mounted from library/openjdk 
26a504e63be4: Mounted from library/openjdk 
8bf42db0de72: Mounted from library/openjdk 
31892cc314cb: Mounted from library/openjdk 
11936051f93b: Mounted from library/openjdk 
1.0.0: digest: sha256:480f6fd3371ddf4cd145b45ddd5ef236dd5d85b8f7012af8720ba7c9c41848cb size: 2007

查看Docker Hub可以看到repository里记录的变化


3.png

终端查看镜像可以发现已上传的镜像

$ docker search grpc-server-java
NAME                            DESCRIPTION                         STARS     OFFICIAL   AUTOMATED
lyudmilalala/grpc-server-java   A grpc server based on SpringBoot   0   

6. 清理内存

查看内存使用情况

docker system df

一键清理

docker system prune
上一篇下一篇

猜你喜欢

热点阅读