注:这里的安装是针对于cetnos7。
安装
老版本
安装老版本可能遇到报错:missing signature key
yum -y install docker.x86_64
新版本
# 换成阿里镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum remove docker docker-common docker-selinux docker-engine
yum -y install docker-ce
systemctl start docker
设置docker镜像,阿里云镜像源需要到官网注册后,才能获取。更多镜像参考:【教程】最新可用!Docker国内镜像源列表_docker更换源-CSDN博客
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com/",
"https://dockerhub.icu"
]
}
systemctl daemon-reload
systemctl restart docker
#不配置,直接使用
docker pull https://dockerhub.icu/biluoer/hadoop:3.1.3-base
常用命令
清理
#命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune
# 作用和上面一样。-f,表示强制删除,不会询问
docker system prune -f
# 清理更彻底,会把没有正在使用的镜像都删掉(小心使用)
docker system prune -a
文件复制
# 本地到服务器
docker cp 本地路径 容器id或者容器名字:容器内路径
# 服务器到本地
docker cp 容器id或者容器名字:容器内路径 本地路径
构建容器
# 使用当前目录的 Dockerfile 创建镜像;-t指定构建出的镜像的tag名称
docker build -t biluoer/ubuntu:v1 .
上传镜像
docker login -u username -p pwd
docker tag hadoop:3.1.3 biluoer/hadoop:3.1.3
docker push biluoer/hadoop:3.1.3
注:
旧版登录成功后,密码会经过base64编码保存在
$HOME/用户名/.docker/config.json
的auth属性中,进过该命令echo 'auth值' | base64 --decode
即可看到明文密码。新版登录会报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。不允许密码明文出现,但其实还是登录成功了,密码统一保存到
config.json
中了。解决方法:- 方法1:将密码写到文件中使用:
cat .docker.pwd | docker login -u username --password-stdin
- 方法2:密码保存到环境变量使用,与方法1类似。
- 方法3:官方推荐了一些工具进行安全的登录。
- 方法1:将密码写到文件中使用:
补充
权限不足
无目录权限
#若挂载目录在容器内访问没有权限,可以在挂载时加上参数:
--privileged=true
无用户权限
# 以root用户身份进入容器
docker exec --user root -it kafka bash
容器访问
容器无法连接另一个容器。
- 方法1:使用主机ip
#容器内默认只能访问docker提供的网关,不能访问其他容器。解决方法:run命令时加上参数:
--network=host
#值:bridge(默认,容器不具有一个公有IP)、host(使用宿主机的网络接口和IP地址)、none(使用127.0.0.1的本机网络)...
- 方法2:
--link
参数被用来在容器之间创建网络连接,使得容器可以互相解析对方的名字和访问相应的服务
#run命令时加上一下参数
--link 当前运行的容器名称:映射名称
# 然后可以通过映射名称+端口号服务其他容器的服务
- 方法3:创建网络,让不同容器使用相同的网络(
--link
参数现已不推荐使用)
# 创建桥接网络,bridge是默认驱动,可以不加
docker network create [--driver bridge] hadoop-net
#创建桥接网络,并指定子网配置,范围:192.168.1.1-192.168.1.254
docker network create --subnet=192.168.1.0/24 hadoop-net
jenkins推送镜像失败
登录后使用docker推送没有问题,但使用jenkins推送报错:denied: requested access to the resource is denied。
原因:因为jenkins在推送镜像的时候使用的是jenkins的伪用户,因此无法直接在jenkins完成登录。
解决方法:将之前生成的config.json拷贝到jenkins的目录下即可
cd /home/用户名/
cp .docker/config.json /var/lib/jenkins
chown -R jenkins.jenkins .docker
# 如果jenkins是以容器方式安装的
docker cp .docker jenkins:/root/
# 或者先在任务的执行脚本中执行一次登录命令,让它自动生成
修改主机名
直接进入容器中修改/etc/hosts,这种方式在重启容器后,修改的内容会丢失。
如果是容器未运行的状态,通过在使用run命令时加上参数 --hostname 主机名
就可以指定容器运行后的主机名。