-
docker 相关知识笔记
- 系统学习、比较完整的
从 0 开始学习使用 docker、分布式 Docker 环境 Swarm 组网 - 管理 Docker 数据卷
- Java 架构师直通车 - Docker 章节:个人感觉还不错,看完之后,基本上认识个大概,能手敲 docker 命令了,感觉打通了任督二脉一样。包括简单的 swarm 跨虚拟机容器通信等知识、docker 镜像制作、私有镜像仓库、等比较适合系统学习。
docker 使用 yum 源安装
docker 容器无法输入中文
docker exec -it 容器名 env LANG=C.UTF-8 /bin/bash
镜像加速
在下载镜像的时候,默认是 docker 官方的镜像,由于地域原因,有时候就很慢,可以使用国内的镜像源地址
登陆阿里云镜像中心地址:https://cr.console.aliyun.com/
然后选择镜像中心,找到加速器地址
下面还有对应的操作文档。笔者这里用了 Docker Desktop ,桌面版,只需要将加速器地址写在 registry-mirrors 中,然后点击右下角的 Apply & Restart ,等待重启后,就可以加速了
docker 容器如何访问宿主机
有时候在本地测试或则学习的时候,一些中间件使用 docker-compose 安装的,遇到容器中要访问宿主机的时候,就不知道如何访问了。
docker-compose 中的 network 参数,参数常见可选值有 none、host、bridge
- none:顾名思义,禁用容器网络,这个时候容器无法访问外部网络,外部也无法访问容器,你的-p参数也会被忽略
- bridge:桥接,也是默认模式,容器会与宿主进行桥接,通过一个桥接的 docker0 网卡进行通信
- host:即撤销网络隔离,这个模式下,你不需要要指定-p参数,容器内监听什么端口,就直接会绑定到宿主的同一端口上,这时容器和宿主是没有隔离的
一般安装软件的时候都没有指定网络,默认就是桥接。在 mac 上与 linux 上由于 mac 的隔离不同,docker0 网卡就没有被创建,但是可以在 docker Desktop 软件上看到使用的 IP
如上图,使用了 192.168.65.0 ,会使用 192.168.65.1 作为网关,而 192.168.65.2 则是宿主机的通信 IP,在 mac 中系统中,你随便进入一个 docker 容器,然后 ping 下面的代码就会返回宿主机的 IP 地址
# docker engine 17.12 版本以前用这个
sh-4.2# ping docker.for.mac.localhost
PING docker.for.mac.localhost (192.168.65.2) 56(84) bytes of data.
64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=1 ttl=37 time=0.520 ms
64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=2 ttl=37 time=2.67 ms
# docker engine 17.12 版本以后用这个地址
sh-4.2# ping docker.for.mac.host.internal
PING docker.for.mac.host.internal (192.168.65.2) 56(84) bytes of data.
64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=1 ttl=37 time=6.55 ms
64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=2 ttl=37 time=6.87 ms
docker 容器中安装软件
# 进入容器
docker exec -it mysql /bin/bash
# 备份源,并且替换为国内源
mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 添加网易源到 sources.list 文件
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
# 更新源
apt update
# 安装软件,比如 vim
apt-get install vim
下面是阿里云的源
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe" >> /etc/apt/sources.list
如果在 update 过程中出现了如下的警告或错误提示
W: GPG error: http://mirrors.aliyun.com/ubuntu xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
E: The repository 'http://mirrors.aliyun.com/ubuntu xenial InRelease' is not signed.
可以将公钥编码添加到服务器
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 公钥编码
比如上面的错误信息可以执行下面的两条语句来解决
root@2a0d7a121d07:/etc/apt# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
Executing: /tmp/apt-key-gpghome.mavQ53lyQL/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
gpg: key 40976EAF437D05B5: public key "Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
root@2a0d7a121d07:/etc/apt# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
Executing: /tmp/apt-key-gpghome.Lo2E3qSuPJ/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
gpg: key 3B4FE6ACC0B21F32: public key "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>" imported
gpg: Total number processed: 1
gpg: imported: 1