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
-
到Docker Hub注册账号,并创建一个和你想要的镜像同名的repository
1.png
2.png -
本机登录账号
$ docker login -u <user_name> -p <user_password>
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
- 如果本地镜像命名没有账号名前缀的话,需要将镜像重命名
docker tag grpc-server-java:1.0.0 lyudmilalala/grpc-server-java:1.0.0
- 将本地镜像推上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