Docker 学习与记录
Docker 是啥
Docker 官网:Docker
参考资料:Docker 菜鸟教程
~~删除第一次,原样的复制黏贴。~~
~~删除第二次,在第一次的基础上调整为QA的方式,但感觉有点小题大作了。~~
目前为止,我的实际需求是会用就行,以及了解一些关键概念。所以第一步,是粗读一遍,然后记录关键词即可。包含目录结构之类的,略过。
容器(Container),镜像(Image),仓库(Registry),Dockerfile
docker ps
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
created(已创建)
restarting(重启中)
running 或 Up(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
容器互联
Dockerfile,镜像构建
Compose,多容器应用构建
Machine,管理多服务器上的 Docker 服务
Swarm,管理多个服务器上的 Docker 容器
如何使用
先去https://hub.docker.com/上找自己想要的镜像,然后通过docker-compose配置启动
安装
首先可用which docker查看本地是否已经安装Docker
之后根据菜鸟教程里的说明进行安装
# 使用官方安装脚本自动安装
curl -fsSL https://test.docker.com -o test-docker.sh # 可能会有点慢,卡在那里
sudo sh test-docker.sh
安装docker-compose
安装
docker-compose的说明可以看菜鸟教程,个人理解,有点像是容器的集群,来共同实现一个的服务。
首先从Github上可以找到最新的版本,然后通过curl下载
# 下载
sudo curl -L "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软连接(todo 可以看下软链接这个是干啥用的)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
配置文件说明
创建docker-compose.yml
yaml
version: '3'
services: # 容器列表
app: # 容器1名
image: 'jc21/nginx-proxy-manager:latest' # 容器镜像,不推荐:latest
restart: unless-stopped # 重启策略
ports: # 端口映射
- '80:80'
- '81:81'
- '443:443'
volumes: # 目录映射
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
之后,如果文件名不为docker-compose.yml,需要另外-f指定
docker-compose down # 下线
docker-compose pull # 拉取latest镜像
docker-compose up -d # 重新上线
其他
修改Docker镜像源
# 修改daemon.json文件,如果没有先建一个即可
sudo vim /etc/docker/daemon.json
# reload docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 检查配置是否生效
sudo docker info|less
# 检索一下应用
sudo docker search nginx
daemon.json 改成
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"3"}
}
其他的镜像源:
- 阿里云:https://registry.cn-hangzhou.aliyuncs.com
- docker中国:https://registry.docker-cn.com
- 网易:http://hub-mirror.c.163.com
- 腾讯云:https://mirror.ccs.tencentyun.com
Docker日志管理(TODO)
TODO 待定
添加非root用户到docker用户组(TODO)
TODO 待定
服务相关
ddns-go
这个得从DNS的概念聊起了。DNS(Domain Name System),域名系统
实时抓取当前的公网ip,然后同步到域名服务商的DNS中
VPS因为已经固定分配了一个公网的ip4,所以倒是不必要
NPM
Nginx proxy manager,nginx的反向代理工具,同时也是nginx的可视化管理工具,默认端口81
docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '<NPM-后台端口>:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
之后,通过http://<服务器ip>:<NPM-后台端口>进行访问,默认用户密码为:
默认帐户:[email protected]
默认密码:changeme
域名-证书
关于域名,可以在阿里云或者其他服务商那里购买域名。不过测试期间可以先直接用ip访问将就下,但安全起见还是上域名了。
之后证书,也就是ssl,Secure Sockets Layer,简单来说就是https中的s。一般在域名服务商都会提供证书申请服务,不过虽然我的域名是在阿里云上购买的,但目前阿里云的免费证书只有单域名的,所以另外选择了从cloudflare上申请证书。步骤如下:
先将当前的证书录入cloudflare,并且将阿里云上证书的dns配置为cloudflare提供的地址,这里不需要完全将证书从阿里云迁移到cloudflare上。
之后获取cloudflare的api 令牌,之间默认操作即可,之后获取到一个token,记下。

再到npm这边,通过SSL Certificates添加令牌,申请证书。这里的Let’s Encrypt是个证书颁发机构。

上面是要申请的域名地址,下面的是你从cloudflare记下的token,之后save,等待一会就申请下来了。

之后就可以到npm中添加反向代理的地址了。


错误:将您重定向的次数过多
在使用cloudflare时会出现,修改如下。

Portainer
docker 管理工具
# 提前拉取镜像
docker pull portainer/portainer-ce
# 开放目标端口,我们这里用9000。你应该改一个别的端口。
sudo ufw allow 9000 comment 'portainer' && sudo ufw reload
# 安装Portainer
docker run -d \
--restart=unless-stopped \
-p 9000:9000 `#改自己喜欢的端口号` \
-v /var/run/docker.sock:/var/run/docker.sock \
--name portainer \
portainer/portainer-ce
Rclone
这是个备份工具,TODO 待定