Docker相关知识

2023年 8月 15日 48.7k 0

前置知识

Docker从17.03开始分为企业版(EE)与社区版(CE)
CE包含了完整的Docker平台
EE提供了一些收费的高级特性

Ubuntu安装docker

Ubuntu安装docker参考文章
1 卸载旧版本
sudo apt-get remove docker docker-engine docker.io
2 使用 APT 安装\

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
#为了确认所下载软件包的合法性,需要添加软件源的 `GPG` 密钥。
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#然后,我们需要向 `sources.list` 中添加 Docker 软件源
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


# 官方源
# $ echo \
#   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
#   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


3 安装 Docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

4 使用脚本自动安装

#  curl -fsSL test.docker.com -o get-docker.sh
 curl -fsSL get.docker.com -o get-docker.sh
 sudo sh get-docker.sh --mirror Aliyun
#  sudo sh get-docker.sh --mirror AzureChinaCloud


5 启动 Docker

 sudo systemctl enable docker
 sudo systemctl start docker

6 启动 Docker

7 测试 Docker 是否安装正确

 sudo groupadd docker
 sudo groupadd docker

8 centos7安装docker-ce

 sudo docker run --rm hello-world

安装步骤

参考文章(原文) centos7安装Docker详细步骤(无坑版教程)

1、卸载旧版本(如果之前安装过的话)

yum remove docker docker-common docker-selinux docker-engine

2、安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置 yum 源 ()括号里面的解释中文去掉(设置失败可以查看下面博主文章)

CentOS7配置阿里云镜像源(超详细过程

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库) 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
4、选择docker版本并安装

yum list docker-ce --showduplicates | sort -r

5、选择一个版本并安装:yum install docker-ce-版本号

安装指定版本docker-ce
yum -y install docker-ce-18.03.1.ce
安装最新版本docker-ce
yum -y install docker-ce

6、启动 Docker 并设置开机自启

systemctl start docker
systemctl enable docker

7、查看docker版本

docker -v

命令相关

centos7.9启动docker

systemctl start docker

宿主机向docker容器参传输文件

docker cp 本机文件 容器ID:容器目录
例如向nginx容器传递一个文件夹:
docker cp ~/h5 247d:/usr/share/nginx/html

重新加载配置文件

systemctl reload docker

启动、容器、停止某个容器

docker start 容器ID
docker restart 容器ID
docker stop 容器ID

通过镜像启动容器
docker  run --detach \
 --hostname xxx.com \  # 替换自己将来(web端,代码clone)想要被外界访问时使用的域名
 --publish 4438:443 \
 --publish 8880:80 \
 --publish 222:22 \
 --name gitlab \
 --restart always \   # 设置重启容器自启
 --privileged=true \  # 获取宿主机root权限
 --volume /srv/gitlab/config:/etc/gitlab \
 --volume /srv/gitlab/logs:/var/log/gitlab \
 --volume /srv/gitlab/data:/var/opt/gitlab \
 gitlab/gitlab-ce:latest
--restart参数

原文 
restart参数用于指定自动重启docker容器策略,包含3个选项:no,on-failure[:times],always,unless-stopped

no 默认值,表示容器退出时,docker不自动重启容器
docker run --restart=no [容器名]

on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=on-failure:3 [容器名]

always 容器退出时总是重启
docker run --restart=always [容器名]

unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
docker run --restart=unless-stopped [容器名]

unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
docker update --restart=always [容器名]

--privileged

--privileged 是 Docker 运行容器时的一个选项,可以让容器进程拥有主机的 root 权限,这个选项用于允许容器执行需要使用特权模式的操作,比如某些系统调用或者设备访问。但是,使用 --privileged 选项会降低 Docker 容器的安全性,因此在使用时需要谨慎。

--detach

--detach-d 选项表示在后台运行容器,即使容器退出也保持运行状态,这通常用于启动守护式进程。该选项会使 Docker 将容器的标准输出和标准错误输出转发到主机的日志系统,以便容器日志可以轻松访问。

注意:在使用 --detach 选项时,如果没有指定容器名称,Docker 会自动生成一个随机的名称。如果需要给容器命名,请使用 --name 选项。

修改已启动的容器的端口映射

参考文章

注意:先关闭docker容器

配置文件相关

insecure-registries

insecure-registries是Docker守护进程配置文件/etc/docker/daemon.json中的一个选项,用于配置Docker访问不安全的Docker镜像仓库时所需的信息。

默认情况下,Docker要求所有的镜像仓库都必须使用TLS加密来保证安全。如果有些镜像仓库没有启用TLS,那么Docker就无法访问这些仓库。在这种情况下,可以将这些不安全的镜像仓库添加到insecure-registries选项中,以便Docker能够访问这些仓库。

需要注意的是,将不安全的镜像仓库添加到insecure-registries选项中会降低安全性,因为所有从这些仓库拉取的镜像都没有经过加密保护,存在被篡改的风险。因此,应该仅将必要的不安全的镜像仓库添加到该选项中,并尽可能使用TLS加密来保护镜像仓库的访问。

问题记录

挂载目录导致容器内文件消失

常用的镜像启动命令汇总(实际映射端口请根据自己需求定义)

nginx-proxy-manager(中文版本镜像为chishin/nginx-proxy-manager-zh)

docker run \
-p 58000:80 \
-p 443:443 \
-p 50081:81 \
--name nginx-proxy-manager \
--restart unless-stopped \
-v /home/nginx-proxy-manager/data:/data \
-v /home/nginx-proxy-manager/letsencrypt:/etc/letsencrypt \
-v /home/nginx-proxy-manager/html:/usr/share/nginx/html \
-v /home/nginx-proxy-manager/etc/nginx:/etc/nginx \
-d jc21/nginx-proxy-manager:latest

nginx

docker run \
-p 8888:80 \
-p 9999:82 \
-p 4433:443 \
--name nginx \
 --restart=always \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest

NginxWebUI

docker run -itd \
  --name nginxWebUi \
  -v /home/nginxWebUI:/home/nginxWebUI \
  -e BOOT_OPTIONS="--server.port=58080" \
  --net=host \
  cym1102/nginxwebui:latest

mysql

docker run \
--name mysql \
-d \
-p 53306:3306 \
--restart=always \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/mysql_slave/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=yourpassword \
mysql:8.0.27

#drone安装

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GOGS_SERVER=http://192.168.124.46:3000 \
  --env=DRONE_RPC_SECRET=coderqwe@w0roaasdajlk \
  --env=DRONE_SERVER_HOST=192.168.124.46:3080 \
  --env=DRONE_SERVER_PROTO=http \
  -e DRONE_USER_CREATE=username:coderzzc,admin:true \
  --publish=3080:80 \
  --publish=3441:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2

drone-runner

docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=192.168.124.46:3080 \
  --env=DRONE_RPC_SECRET=coderqwe@w0roaasdajlk \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=docker-runner \
  --publish=3005:3000 \
  --restart=always \
  --name=drone-runner \
  drone/drone-runner-docker:1

redis

docker run \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 56379:6379 \
--name myredis \
--restart=always \
-v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf \
-v /home/redis/myredis/data:/data \
-d redis redis-server /etc/redis/redis.conf  \
--appendonly yes  \
--requirepass yourpassword

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论