目錄
- 1. 安裝
- 1.1 LINUX
- 1.2 Windows
- 2. 常用配置
- 2.1 普通權限運行
- 2.2 開機自啟動
- 2.3 3 更換Docker鏡像源
- 2.4 更改默認存儲位置
- 3. 顯示帶UI的軟件
- 4. 基于DOCKER的服務
- 4.1 FTP
- 4.2 Portainer
- 4.3 Watchtower
- 4.4 SiYuan
- 4.5 GitLab
- 4.5.1 創建容器
- 4.5.2 克隆路徑問題
- 4.5.3 獲取默認密碼
1. 安裝
1.1 LINUX
參考
- https://docs.docker.com/engine/install/ubuntu/
- https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/
# 卸載之前的安裝
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd# 安裝依賴
sudo apt-get update -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release# 添加GPG
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 設置倉庫
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安裝最新引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin# 運行樣例
sudo docker run -rm hello-world
1.2 Windows
待補充
2. 常用配置
2.1 普通權限運行
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world
2.2 開機自啟動
# 開啟
sudo systemctl enable docker.service
sudo systemctl enable containerd.service# 關閉
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
2.3 3 更換Docker鏡像源
# 方式一:命令添加
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.mirrors.sjtug.sjtu.edu.cn","https://cr.console.aliyun.com","http://mirror.azure.cn/"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker# 方式二:手動添加
sudo vim /etc/docker/daemon.json
{"registry-mirrors" : [ "https://docker.mirrors.sjtug.sjtu.edu.cn" ],
}
sudo systemctl daemon-reload
sudo systemctl restart docker
2.4 更改默認存儲位置
sudo docker info | grep "Docker Root Dir" # 查看 docker 存儲位置
sudo systemctl stop docker # 停止 docker 服務
sudo rsync -avzP /var/lib/docker/ /home/docker # 復制原有數據到新位置
sudo rm -rf /var/lib/docker # 刪除原始存儲文件夾
sudo ln -s /home/docker /var/lib/ # 指定新的路徑之軟連接到新位置
sudo sed -i '1a"data-root": "/home/docker",' > /etc/docker/daemon.json # 指定新的路徑之配置文件指定新位置
sudo systemctl daemon-reload # 重啟守護進程
sudo systemctl restart docker # 重啟docker
sudo systemctl status docker # 查看運行狀態
sudo docker info | grep "Docker Root Dir" # 查看最新存儲位置
3. 顯示帶UI的軟件
# 1. 宿主機開放X server權限
xhost +# 2. 創建容器,使用 -v 參數掛載宿主機的/tmp/.X11-unix目錄,該目錄中存放著unix套接字文件;使用 -e 參數設置容器的DISPLAY環境變量與宿主機一致
docker run -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY ubuntu:20.04apt update
apt install gedit
gedit
4. 基于DOCKER的服務
4.1 FTP
# 拉取鏡像
docker pull fauria/vsftpd# 創建數據卷文件夾
mkdir -p ${HOME}/.docker/volumes/vsftpd# 創建容器
docker run \
--detach \
--publish 51020:20 \
--publish 51021:21 \
--publish 21100-21103:21100-21103 \
--env FTP_USER=admin \
--env FTP_PASS=admin \
--env PASV_ADDRESS=172.17.0.1 \
--env PASV_MIN_PORT=21100 \
--env PASV_MAX_PORT=21103 \
--env REVERSE_LOOKUP_ENABLE=NO \
--name vsftp \
--hostname localhost \
--privileged=true \
--restart=always \
--volume ${HOME}/.docker/volumes/vsftpd:/home/vsftpd \
--volume /etc/localtime:/etc/localtime:ro \
fauria/vsftpd# 命令行下載文件
wget ftp://admin:admin@172.17.0.1:50021/sources/boost_1_74_0.tar.gz# 默認情況下,僅能上傳下載FTP根目錄下的數據。不能下載其子目錄中的數據。這是由于新建的子目錄的所有權為root賬戶。而連接的賬戶為ftp。因此需要通過以下命令修改文件夾所屬的用戶及用戶組。
chown ftp用戶名 文件夾 # 修改所有者
chgrp ftp用戶名 文件夾 # 修改所屬組# UBUNTU連接FTP服務器
文件管理器 >> Other Locations >> Connect to server
ftp://172.17.0.1:10021
4.2 Portainer
# 拉取鏡像
docker pull portainer/portainer-ce# 創建數據卷文件夾
mkdir -p ${HOME}/.docker/volumes/portainer/data# 創建容器
docker run \
--detach \
--publish 58000:8000 \
--publish 59000:9000 \
--name=portainer \
--restart=always \
--hostname localhost \
--privileged=true \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume ${HOME}/.docker/volumes/portainer/data:/data \
portainer/portainer-ce:latest# 瀏覽器中輸入:http://172.17.0.1:9000
4.3 Watchtower
# 拉取鏡像
docker pull containrrr/watchtower# 創建容器
docker run \
--detach \
--name watchtower \
--restart=always \
--hostname localhost \
--privileged=true \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower# 單次運行
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once
4.4 SiYuan
# 拉取鏡像
docker pull b3log/siyuan# 創建數據卷文件夾
mkdir -p ${HOME}/.docker/volumes/siyuan/workspace
chown -R 1000:1000 ${HOME}/.docker/volumes/siyuan/workspace# 創建容器
docker run \
--detach \
--publish 56806:6806 \
--name=siyuan \
--restart=always \
--privileged=true \
--user 1000:1000 \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume ${HOME}/.docker/volumes/siyuan/workspace:/siyuan/workspace \
b3log/siyuan --workspace=/siyuan/workspace --accessAuthCode=SiYuan123,# 瀏覽器中輸入:
# http://172.17.0.1:56806
4.5 GitLab
4.5.1 創建容器
# 1. 拉取鏡像
docker pull gitlab/gitlab-ce# 2. 創建宿主機數據卷文件夾
mkdir -p ${HOME}/.docker/volumes/gitlab/logs # 日志
mkdir -p ${HOME}/.docker/volumes/gitlab/data # 數據
mkdir -p ${HOME}/.docker/volumes/gitlab/config # 配置# 3. 創建容器
docker run \
--detach \
--publish 50080:80 \
--publish 50022:22 \
--publish 50443:443 \
--name gitlab \
--hostname localhost \
--privileged=true \
--restart always \
--volume ${HOME}/.docker/volumes/gitlab/config:/etc/gitlab \
--volume ${HOME}/.docker/volumes/gitlab/logs:/var/log/gitlab \
--volume ${HOME}/.docker/volumes/gitlab/data:/var/opt/gitlab \
--volume /etc/localtime:/etc/localtime:ro \
--env 'GITLAB_HOST=192.168.1.88' \
--env 'GITLAB_PORT=50080' \
--env 'GITLAB_SSH_PORT=50022' \
gitlab/gitlab-ce# 瀏覽器中輸入:
# http://172.17.0.1:50080
4.5.2 克隆路徑問題
vim ${HOME}/.docker/volumes/gitlab/config/gitlab.rb# 方式一:
external_url 'http://192.168.1.88:50080'
gitlab_rails['gitlab_ssh_host'] = '192.168.1.88'
gitlab_rails['gitlab_shell_ssh_port'] = 50022
nginx['listen_port'] = 80# 方式二:
創建容器時不對 80 端口進行映射,而是直接映射 external_url 中的端口(即原本 -p 9080:80 修改成 -p 9080:9080),同時不要設置 nginx['listen_port'],因為 nginx 會自動監聽 external_url 中的端口,若 external_url 未指定端口,則監聽 80。docker restart gitlab
4.5.3 獲取默認密碼
GitLab初始化時將初始秘方放在/etc/gitlab/initial_root_password
,且該文件在首次執行reconfigure后自動刪除。由于做了數據卷掛載,因此只需要到宿主機的${HOME}/.docker/volumes/gitlab/config/initial_root_password
文件中獲取。
sudo cat ${HOME}/.docker/volumes/gitlab/config/initial_root_password