背景
Docker 部署有着非常多的优势,可以帮助提高开发、测试和部署的效率,降低成本,使应用更具可移植性和可扩展性,包括但不限于
- 标准化应用发布,跨平台和主机使用:Docker的镜像提供了标准化发布环境,使得应用可以在不同的平台和主机上运行,提高了可移植性。
- 节约时间,方便快速部署和启动:使用Docker可以快速构建、部署和启动应用,特别是在开发环境中,可以快速地构建和测试应用。
- 方便构建基于SOA架构或微服务架构的系统:Docker可以方便地构建和部署基于SOA架构或微服务架构的系统,使得不同的服务可以独立地开发和部署。
- 节约成本:通过Docker的镜像和容器化技术,可以有效地降低应用运行所需的硬件资源,从而节约成本。
- 方便持续集成:Docker可以方便地集成到持续集成流程中,使得代码的构建、测试和部署更加自动化。
- 可以作为集群系统的轻量主机或节点:Docker可以作为集群系统的轻量主机或节点,提供高效的资源管理和调度。
- 简化配置:Docker将运行的环境打包至容器,使用时直接启动即可,大大简化了配置过程。
- 快速迁移扩展:我们可以快速将容器进行打包迁移到需要的平台上应用,拥有良好的兼容性。
而且,这么多年下来,各类应用,都已经docker化了。大大方便了我们日常的使用,以下就列举了在日常使用和开发中常用的一些docker
前置
安装好docker engine 和 docker-compose。
1. 安装docker engine
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker
docker version
# 设置Docker 自启动
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
# 关闭docker 服务自启动
systemctl disable docker.service
# 添加docker 用户组
sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
sudo systemctl restart docker
docker ps
2. 安装 docker compose
Docker Compose是一个工具,它用于定义和运行使用Docker容器的应用程序。这个工具负责编排多个Docker容器,使容器能够相互配合完成特定的任务。它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目。这个文件可以用来定义多个服务以及它们之间的依赖关系,并可以指定服务的启动顺序。使用Docker Compose,用户可以很方便地在单个文件中定义一个Web项目,包括Web服务容器本身、后端的数据库服务容器以及负载均衡容器等。
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3. docker 国内加速
sudo vi /etc/docker/daemon.json
改为如下内容
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baiduce.com"
]
}
重启docker
sudo systemctl daemo-reload
sudo systemctl restart docker
通用类
主要记录了All-in-one 上常用的docker镜像。
Portainer
Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
虽然习惯了docker cli, 但是在家里的AIO 上,有个web UI,省的每次都ssh了,也方便了不少。
-
安装
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce -
启动后访问,http://ip:9000, 首次登录时创建admin账号密码
后续就可以正常管理了。
Nextcloud
Nextcloud 是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。其客户端覆盖了Windows、Mac、Android、iOS、Linux等各种平台,也提供了网页端以及WebDAV接口,方便在各种设备上访问云盘。与Dropbox等专有服务相比,Nextcloud的开放架构让用户可以利用应用程序的方式在服务器上新增额外的功能,并让用户可以完全掌控自己的数据。
-
安装
docker run -d
--name nextcloud
-p 80:80
-v /home/user/nextcloud:/var/www/html
nextcloud
docker宿主机ip+port访问,即可访问,然后创建用户即可。
- iOS提示文件过大,无法上传
413 error the file is too large
修改如下
/var/www/html/.user.ini
#新增俩行
upload_max_filesize=16G
post_max_size=16G
/var/www/html/.htaccess
<IfModule mod_php7.c>
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
php_value output_buffering 0
#新增部分
php_value upload_max_filesize 16G
php_value post_max_size 16G
<IfModule mod_env.c>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
/var/www/html/3rdparty/aws/aws-crt-php/php.ini
#新增
post_max_size = 16G
upload_max_filesize = 16G
iOS 客户端设置下即可
- 暴露到外网
编辑 config/config.php 中的 "trusted_domains" 设置,加入你的域名
如下
百度网盘
不想在本机上安装度盘,怕他读我的信息,就单独起个docker 跑。
-
安装
docker run -d
--name=baidunetdisk
-p 15811:5800
-p 15911:5900
-v /home/user/baidu/config:/config
-v /home/user/baidu/config/downloads:/config/downloads
-e VNC_PASSWORD=admin123
--restart unless-stopped
johngong/baidunetdisk:latest -
登录和使用和正常度盘差不多
Dashy
Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。用户可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。
类似的还有homer homarr flame Heimdall
-
安装
docker run -d
-p 80:80
-v /home/user/dashy/dashy.yml:/app/public/conf.yml
--name my-dashboard
--restart=always
lissy93/dashy:latest
可以在UI上,通过拖拽的方式,配置自己的当行业,或者通过编写dashy.yml文件。
此外,还支持配置访问权限
appConfig:
theme: material
layout: horizontal
iconSize: large
language: en
auth:
enableGuestAccess: true
users:
- user: adminme
hash: 密码的hash值
type: admin
具体可以参考:dashy quick start
Novnc
Novnc是一个基于HTML5的VNC客户端,使用WebSockets、Canvas和JavaScript实现。它通常被用于云计算和虚拟机控制面板中,如OpenStack Dashboard和OpenNebula Sunstone。虽然Novnc采用WebSockets实现,但大多数VNC服务器并不支持WebSockets,因此Novnc不能直接连接到VNC服务器,需要一个代理(如websockify)来做WebSockets和TCP sockets之间的转换。用户可以从Novnc的官方网站下载并安装该客户端,或者使用git进行安装。安装完成后,用户可以通过运行命令来启动Novnc服务,并在浏览器中输入显示的链接地址来访问Windows桌面。
如果访问一些网站,不想留下痕迹,就可以使用docker 起一个,类似沙盒。
这里用的是https://hub.docker.com/r/ljdyw/ubuntu-novnc,集成了百度云,迅雷x,火狐浏览器,图形化压缩软件,文本编辑器,qb下载器,中文桌面支持
docker run -dit -p 8080:8080 -p 6080:6080 -p 50000:50000 -p 5901:5901 -v /home/user/novnc:/root/下载 --name ubuntu1 ljdyw/ubuntu-novnc:latest
说明如下
访问端口6080
22是ssh的端口 6.0后默认关闭 打开命令 /etc/init.d/ssh start
5901是vnc端口
连接密码 root333
root密码 root333
修改密码 进入桌面后右键打开终端 输入 vncpasswd 回车-输入密码-回车-再次输入密码-回车
8080是qb访问端口
默认用户名admin
默认密码password 目录 /root/下载
Alist
Alist 是一个开源Web服务,可以添加多种网盘,将多个网盘应用集成到一个统一应用中使用,还支持通过WebDAV服务映射到操作系统本地目录使用。它不仅支持网盘存储,还支持对象存储、本地存储、FTP等等。
docker run -d --restart=always -v /etc/alist:/opt/alist/data -v /home/user/alist:/media -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
可以配合Kodi等,搭建自己的家庭影院。
Alist+KODI打造免费家庭影院
frp
frp是fast reverse proxy的缩写,是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp有服务端(frps,s指service,通常搭建在有公网IP的设备上)和客户端(frpc,c指client,通常搭建在内网设备上)
-
server 端安装
cd frps
创建docker-compose.yml, 内容如下
version: '3.3'
services:
frps:
restart: always
network_mode: host
volumes:
- './frps.ini:/etc/frp/frps.ini'
container_name: frps
image: snowdreamtech/frps
同目录下新增 frps.ini 文件,样例如下
[common]
#frp 监听端口,与客户端绑定端口
bind_port= 5443
kcp_bind_port = 5443
#dashboard用户名
dashboard_user= admin
#dashboard密码
dashboard_pwd= passwd
#dashboard端口,启动成功后可通过浏览器访问如http://ip:9527
dashboard_port= 9527
#设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端
token = 1234abcd
启动
docker-compose up -d
Tips 记得网络策略放开所需端口。
-
client 端安装
cd frpc
同样的,创建 docker-compose.yml文件和frpc.ini的文件
docker-compose.yml
version: '3.3'
services:
frpc:
restart: always
network_mode: host
volumes:
- './frpc.ini:/etc/frp/frpc.ini'
container_name: frpc
image: snowdreamtech/frpc
frpc.ini
# frpc.ini
[common]
server_addr = 43.132.202.152
server_port = 5443
token = 8ad3d1x429a2d
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 2222
remote_port = 6222
[nextcloud]
type = tcp
local_ip = 127.0.0.1
local_port = 14433
remote_port = 7004
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 5900
use_encryption = true
use_compression = true
启动
docker-compose up -d
开发常用docker
Nginx Proxy Manager
Nginx Proxy Manager 是一个反向代理管理系统,它基于Nginx,具有漂亮整洁的Web UI。这个工具可以获得受信任的SSL证书,并通过单独的配置、自定义和入侵保护来管理多个代理。它是开源的,获得了很多的关注和认可。
创建 docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 冒号左边可以改成自己服务器未被占用的端口
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
启动
docker-compose up -d
具体配置,参见官方文档
Halo
Halo博客系统是一款由Halo团队开发的博客系统,支持托管任意容器化应用。HALO博客系统使用Java语言编写,并基于Spring Boot框架开发。它还使用了MyBatis作为持久层框架,Redis作为缓存服务器,并使用Docker进行容器化部署。HALO博客系统具有用户认证、文章发布、评论、标签等功能,并支持多种存储方式。同时,它还支持在Docker和Kubernetes等平台上部署和使用。
一样,用docker-compose 启动, 文件内容如下,
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=1234567
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: mysql:8.0.31
container_name: halodb
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=1234567
- MYSQL_DATABASE=halo
networks:
halo_network:
PostgreSQL
PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),使用C语言编写。它支持SQL语言,并提供了强大的数据完整性、事务处理和安全性功能。PostgreSQL可以运行在多种操作系统上,包括Linux、Windows和macOS等。它提供了灵活的配置选项,可以根据需求进行定制,并具有可扩展性。PostgreSQL在开源社区中广泛使用,并被认为是一个可靠、高性能的数据库系统。
docker run -it --name postgress --restart always -e TZ='Asia/Shanghai' -e POSTGRES_PASSWORD='abc123' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /home/postgres/data:/var/lib/postgresql -p 5432:5432 -d postgres
pgAdmin
pgAdmin pgAdmin是一个设计、维护和管理PostgreSQL数据库的通用工具。它支持多种操作系统,包括Linux、Unix、Mac OS X以及Windows,可以管理PostgreSQL 9.2以及更高版本。同时,pgAdmin还提供了大量的功能特性,如对象统计信息显示、依赖对象和被依赖对象的展示等。
pgAdmin在PostgreSQL社区中广泛使用,被视为一个可靠、高性能的数据库管理工具。如果您是PostgreSQL数据库管理员或开发人员,那么pgAdmin可能是您需要使用的工具之一。
docker run -d --name pgadmin --restart always -p 5080:80 -e 'PGADMIN_DEFAULT_EMAIL=test@abc.com' -e 'PGADMIN_DEFAULT_PASSWORD=testpwd' -e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' -e 'PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"' -e 'PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10' dpage/pgadmin4
Redis
Redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它是一个高性能的key-value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 在此基础上,redis支持各种不同方式的排序。 与memcached一样,为了保证效率,数据都是缓存在内存中。 从2010年3月15日起,Redis的开发工作由VMware主持。 从2013年5月开始,Redis的开发由Pivotal赞助。
docker run --restart=always -p 6379:6379 --name redis -d redis
gitlab
gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。它被广泛使用于基于git的开源代码管理平台,主要针对软件开发过程中产生的代码和文档进行管理。GitLab主要针对group和project两个维度进行代码和文档管理,其中group是群组,project是工程项目。一个group可以管理多个project,可以理解为一个群组中有多项软件开发任务,而一个project中可能包含多个branch,意为每个项目中有多个分支,分支间相互独立,不同分支可以进行归并。
docker run --detach \
--hostname gitlab.example.com \
--publish 19443:443 --publish 19080:80 --publish 19022:22 \
--name gitlab \
--restart always \
--volume /home/user/gitlab/config:/etc/gitlab \
--volume /home/user/gitlab/logs:/var/log/gitlab \
--volume /home/user/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
创建用户
docker exec -it gitlab bash
gitlab-rails console -e production
//第一个默认为root
user = User.where(id: 1).first
//必须同时更改密码和password_confirmation才能使其正常工作
user.password = '123456'
user.password_confirmation = '123456'
user.save!