一、Docker开发环境搭建
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- 简而言之,就是弄好docker镜像,大家可以共享使用。
1、安装 docker
sudo apt-get install docker.io
# 查询版本
docker version
Client:
Version: 20.10.7
API version: 1.41
Go version: go1.13.8
Git commit: 20.10.7-0ubuntu1~18.04.1
Built: Wed Aug 4 22:43:25 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied
2、加入权限
默认情况下会报后面的错误,如果使用sudo就不会报错。不想每次都sudo的话,可以把用户加入到docker组。
# 如果还没有 docker group 就添加一个(默认安装后已经有了)
# sudo groupadd docker
# 将用户加入该 group 内。然后退出并重新登录就生效啦。
sudo gpasswd -a ${your_user_name} docker
# 重启 docker 服务
sudo service docker restart
# 更新用户组(切换当前会话到新 group), 或者关掉终端重新连接也会生效
newgrp - docker
3、常用命令
Docker命令_各种参数简介(run、v、rm、-w、-u、-e)
镜像使用:
# 拉取镜像
docker pull <镜像名称>
# 使用镜像
docker run <镜像名称>:<TAG>
# 使用镜像容器,并为以命令行模式进入该容器
docker run -it <镜像名称>:<TAG> /bin/bash
# 删除镜像
docker rmi <镜像名称>:<TAG>
# 查看镜像
docker images
容器使用:
# 查看所有的容器
docker ps -a
# 启动容器
docker start <CONTAINER ID>
# 停止容器
docker stop <CONTAINER ID>
# 重启容器
docker restart <CONTAINER ID>
# 删除容器
docker rm -f <CONTAINER ID>
# 进入已启动的容器(exit 退出后容器会停止)
docker attach <CONTAINER ID>
# 进入已启动的容器(exit 退出后容器不会停止)
docker exec -it <CONTAINER ID> /bin/bash
# 退出容器(在进入容器后)
exit
其他:
# 从容器中拷贝文件到宿主机(本地)
docker ps -a # 查看容器
docker cp <CONTAINER ID>:<path/file> . # 复制文件到本地当前路径(不需要开启容器)
# 从宿主机(本地)拷贝文件到容器
docker cp <path/file> <CONTAINER ID>:<path/file>
用法:docker [OPTIONS]命令
选项:
# ——config string客户端配置文件的位置
# -c,——context string要连接到的上下文的名称daemon(覆盖DOCKER_HOST环境变量和默认上下文设置为"docker context use")
# -D,——debug打开调试模式
# -H,——host list要连接的守护进程套接字
# -l,——log-level string 设置日志级别(“调试”|“信息”|“警告”|“错误”|“致命”)(默认“信息”)
# ——tls使用tls;由——tlsverify暗示
# ——tlscacert string仅由该CA签署的信任证书
# ——tlscert string TLS证书文件路径
# ——tlskey string TLS密钥文件路径
# ——tlsverify使用TLS,验证远程
# -v,——version打印版本信息并退出
管理命令:
管理构建
config管理Docker配置
管理容器
管理上下文
image管理镜像
manifest管理Docker镜像清单和清单列表
网络管理网络
管理集群节点
管理插件
secret管理Docker的秘密
服务管理服务
stack管理Docker堆栈
swarm管理swarm
系统管理Docker
trust管理Docker镜像的信任
volume管理卷
二、问题记录
【问题解决】docker警告:open /home/xxx/.docker/config.json: permission denied
【问题解决】docker.io : 依赖: containerd (>= 1.2.6-0ubuntu1~)
【问题解决】Error response from daemon: Head https://registry-1.docker.io/v2/
【问题解决】Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runni
问题: docker TAG
为 none
,镜像无法删除
解决:
# 查看镜像,找到对应的 IMAGE ID
docker images
# 给该镜像打上标签(REPOSITORY 为仓库名,TAG 随意定一个标签名)
docker tag <IMAGE ID> <REPOSITORY>:<TAG>
# 删除镜像
docker rmi <镜像名称>:<TAG>
问题: 删除镜像失败,有已经打开的容器
Error response from daemon: conflict: unable to remove repository reference " ... " (must force) - container cb5a1151aedf is using its referenced image 5dbd183094c0
解决:
# 列出所有容器
docker ps -a
# 删除所有使用了该镜像的容器
docker rm -f <CONTAINER ID>
# 删除镜像
docker rmi <镜像名称>:<TAG>
问题: 执行 docker run --rm -v $PWD:/project
报错:
docker: Error response from daemon: create $PWD: "$PWD" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path. See 'docker run --help'.
解决:
docker run --rm -v /$PWD:/project