【DOCKER】随手记

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.04

apt 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 未指定端口,则监听 80docker 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

相关推荐

  1. DOCKER手记

    2024-02-23 13:44:02       27 阅读
  2. 【UBUNTU】手记

    2024-02-23 13:44:02       39 阅读
  3. 博客手记

    2024-02-23 13:44:02       36 阅读
  4. 博客手记

    2024-02-23 13:44:02       36 阅读
  5. Github 学习使用手记

    2024-02-23 13:44:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 13:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 13:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 13:44:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 13:44:02       20 阅读

热门阅读

  1. MySQL常见面试题

    2024-02-23 13:44:02       28 阅读
  2. InnoDB架构

    2024-02-23 13:44:02       28 阅读
  3. 排序算法总结

    2024-02-23 13:44:02       23 阅读
  4. 产品化Chatgpt所面临的五大技术挑战

    2024-02-23 13:44:02       23 阅读
  5. 1003 我要通过!

    2024-02-23 13:44:02       26 阅读
  6. 力扣热题100_子串_560_和为 K 的子数组

    2024-02-23 13:44:02       30 阅读
  7. 爬虫基本库的使用(httpx库的详细解析)

    2024-02-23 13:44:02       29 阅读