首页 > 其他分享 >【Docker】史上最全 Docker 教程

【Docker】史上最全 Docker 教程

时间:2024-08-12 21:24:19浏览次数:13  
标签:容器 教程 -- 最全 nginx 镜像 Docker docker

Docker入门:史上最全 Docker 教程

安装
curl -sSL https://get.docker.com/ | sh
sudo chmod 777 /var/run/docker.sock

在后台创建和运行容器

$ docker run -d -p 80:80 docker/getting-started

  • -d - 以分离(后台)模式运行容器
  • -p 80:80 - 将端口 80 映射到容器中的端口 80,格式:宿主机端口:容器端口
  • docker/getting-started - 要使用的镜像

在前台创建并运行容器(之后如果要退出容器但是不关闭容器,按Ctrl+P+Q即可)

$ docker run -it --rm -p  8001:8080 --name my-nginx nginx

  • -it - 交互式 bash 模式
  • --rm - 容器终止运行后自动删除容器文件
  • -p 8001:8080 - 将 8001 端口映射到容器中的 8080 端口
  • --name my-nginx - 指定名称
  • nginx - 要使用的镜像

一般命令

ExampleDescription
docker ps列出正在运行的容器
docker ps -a列出所有容器
docker ps -s列出正在运行的容器 (带 CPU / 内存)
docker images列出所有镜像
docker exec -it <container> bash连接到容器
docker logs <container>显示容器的控制台日志
docker stop <container>停止容器
docker restart <container>重启一个容器
docker rm <container>移除一个容器
docker port <container>显示容器的端口映射
docker top <container>列出进程
docker kill <container>杀死一个容器

参数 <container> 可以是容器 id 或名称

Docker 容器

启动和停止

DescriptionExample
docker start nginx-server开始
docker stop nginx-server停止
docker restart nginx-server重启
docker pause nginx-server暂停
docker unpause nginx-server取消暂停
docker wait nginx-server阻塞容器
docker kill nginx-server发送 SIGKILL
docker attach nginx-server连接到现有容器

说明

ExampleDescription
docker ps列出正在运行的容器
docker ps -a列出所有容器
docker logs nginx-server容器日志
docker inspect nginx-server检查容器
docker events nginx-server容器事件
docker port nginx-server公共端口
docker top nginx-server运行进程
docker stats nginx-server容器资源使用
docker diff nginx-server列出对容器所做的更改

创建容器

docker create [options] IMAGE
  -a, --attach               # 附加标准输出/错误
  -i, --interactive          # 附加标准输入(交互式)
  -t, --tty                  # 伪终端 pseudo-tty
      --name NAME            # 命名你的镜像
  -p, --publish 5000:5000    # 端口映射(主机:容器)
      --expose 5432          # 向容器公开端口 
  -P, --publish-all          # 发布所有端口
      --link container:alias # 链接 linking
  -v, --volume `pwd`:/app    # mount(需要绝对路径)
  -e, --env NAME=hello       # 环境变量 env vars
实例
$ docker create --name my_redis --expose 6379 redis:3.0.2

操控

重命名容器

docker rename my-nginx nginx-server

移除容器

docker rm nginx-server

更新容器

docker update --cpu-shares 512 -m 300M nginx-server

Docker 镜像

操控

ExampleDescription
docker images列出镜像
docker rmi nginx删除镜像
docker load < ubuntu.tar.gz加载一个 tarred 存储库
docker load --input ubuntu.tar加载一个 tarred 存储库
docker save busybox > ubuntu.tar将镜像保存到 tar 存档
docker history显示镜像的历史
docker commit nginx my_nginx将容器另存为镜像
docker tag nginx eon01/nginx标记镜像
docker push eon01/nginx推送镜像

构建镜像

# 注意有的最后面是英文 .
$ docker build .
$ docker build github.com/creack/docker-firefox
$ docker build - < Dockerfile
$ docker build - < context.tar.gz
$ docker build -t eon/nginx-server .
$ docker build -f myOtherDockerfile .
$ curl example.com/remote/Dockerfile | docker build -f - .

删除 <none> 镜像

$ docker rmi -f $(docker images | grep "none" | awk '{print $3}')

Docker 网络

创建网络

docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork

自定义网络子网和网关

docker network create -d overlay \
  --subnet=192.168.0.0/16 \
  --subnet=192.170.0.0/16 \
  --gateway=192.168.0.100 \
  --gateway=192.170.0.100 \
  --ip-range=192.168.1.0/24 \
  --aux-address="my-router=192.168.1.5" \
  --aux-address="my-switch=192.168.1.6" \
  --aux-address="my-printer=192.170.1.5" \
  --aux-address="my-nas=192.170.1.6" \
  MyOverlayNetwork

操作

获取容器连接的网络

docker inspect MyContainer | grep Network

获取有关网络的信息

docker network inspect <network_name>

将正在运行的容器连接到网络

docker network connect <network_name> <container_name>

启动时将容器连接到网络

docker run -it -d --network=<network_name> <container_name>

断开容器与网络的连接

docker network disconnect <network_name> <container_name>

删除网络

docker network rm <network_name>

列出网络

docker network ls

Docker 快捷键

需要特别注意的是,退出快捷键中的删除容器实例,只对于使用 docker attach 进入的容器生效,使用 docker exec 进入容器后,使用上面的快捷键后将隔离容器,且不会删除容器实例。

退出 - 关闭容器

Docker 快捷键说明
ctrl c将关闭容器

将关闭容器, 并删除当前的容器实例

退出 - 保留容器

Docker 快捷键说明
ctrl d保留容器

将保留容器,并退出到Docker主机的命令行界面

退出 - 容器分离

Docker 快捷键说明
ctrl p q容器分离

将容器分离,保留容器,但是不退出

各种各样的

Docker Hub

$ docker search search_word  # 在 docker hub 中搜索镜像
$ docker pull user/image     # 从 docker hub 下载镜像
$ docker login               # 向 docker hub 进行身份验证
$ docker push user/image     # 将镜像上传到 docker hub

镜像仓库命令

登录到镜像仓库

$ docker login
$ docker login localhost:8080

从镜像仓库注销

$ docker logout
$ docker logout localhost:8080

搜索镜像

$ docker search nginx
$ docker search nginx --stars=3 --no-trunc busybox

拉取镜像

$ docker pull nginx
$ docker pull eon01/nginx localhost:5000/myadmin/nginx

推送镜像

$ docker push eon01/nginx
$ docker push eon01/nginx localhost:5000/myadmin/nginx

批量清除

实例说明
docker stop -f $(docker ps -a -q)停止所有容器
docker rm -f $(docker ps -a -q)删除所有容器
docker rmi -f $(docker images -q)删除所有镜像
docker volume prune删除所有未使用的Docker Volume
docker network prune删除所有未使用的Docker网络
docker system prune清理所有空闲或与任何Docker容器无关的资源
docker image prune删除悬空的Docker镜像
docker container prune删除所有未使用的Docker 容器

卷 volume

$ docker volume ls    # 检查卷
$ docker volume prune # 清理未使用的卷

Docker Compose

:-:-
docker-compose up创建和启动容器
docker-compose up -d以分离模式创建和启动容器
docker-compose down停止和删除容器、网络、映像和卷
docker-compose logs查看容器的输出
docker-compose restart重启所有服务
docker-compose pull拉取所有服务的镜像
docker-compose build构建所有服务的镜像
docker-compose config验证并查看 Compose 文件
docker-compose scale <service_name>=<replica>为服务指定容器个数
docker-compose top显示正在运行的进程
docker-compose run -rm -p 2022:22 web bash启动 Web 服务并运行 bash 作为其命令,删除旧容器

Docker Services

:-:-
docker service create <options> <image> <command>创建新服务
docker service inspect --pretty <service_name>显示详细信息服务
docker service ls列出服务
docker service ps列出服务的任务
docker service scale <service_name>=<replica>规模特殊服务
docker service update <options> <service_name>更新服务选项

Docker Stack

:-:-
docker stack ls列出此 Docker 主机上所有正在运行的应用程序
docker stack deploy -c <composefile> <appname>运行指定的 Compose 文件
docker stack services <appname>列出与应用关联的服务
docker stack ps <appname>列出与应用关联的正在运行的容器
docker stack rm <appname>拆掉一个应用程序

Docker Machine

:-:-
docker-machine create --driver virtualbox myvm1创建虚拟机(Mac、Win7、Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1Win10
docker-machine env myvm1查看有关您的节点的基本信息
docker-machine ssh myvm1 "docker node ls"列出集群中的节点
docker-machine ssh myvm1 "docker node inspect <node ID>"检查节点
docker-machine ssh myvm1 "docker swarm join-token -q worker"查看加入令牌
docker-machine ssh myvm1打开与 VM 的 SSH 会话; 输入“exit”结束
docker-machine ssh myvm2 "docker swarm leave"让工人离开群体
docker-machine ssh myvm1 "docker swarm leave -f"让主人离开,杀群
docker-machine start myvm1启动当前未运行的 VM
docker-machine stop $(docker-machine ls -q)停止所有正在运行的虚拟机
docker-machine rm $(docker-machine ls -q)删除所有虚拟机及其磁盘映像
docker-machine scp docker-compose.yml myvm1:~将文件复制到节点的主目录
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"部署应用

docker 主要命令

:-:-
attach将本地标准输入、输出和错误流附加到正在运行的容器
build从 Dockerfile 构建镜像
commit从容器的更改创建新镜像
cp在容器和本地文件系统之间复制文件/文件夹
create创建一个新容器
diff检查容器文件系统上文件或目录的更改
events从服务器获取实时事件
exec在正在运行的容器中运行命令
export将容器的文件系统导出为 tar 存档
history显示镜像的历史
images列出镜像
import从 tarball 导入内容以创建文件系统映像
info显示系统范围的信息
inspect返回有关 Docker 对象的低级信息
kill杀死一个或多个正在运行的容器
load从 tar 存档或 STDIN 加载镜像
login登录到 Docker 注册表
logout从 Docker 注册表中注销
logs获取容器的日志
pause暂停一个或多个容器内的所有进程
port列出容器的端口映射或特定映射
ps列出容器
pull从注册表中提取镜像或存储库
push将镜像或存储库推送到注册表
rename重命名容器
restart重启一个或多个容器
rm移除一个或多个容器
rmi移除一张或多张镜像
run在新容器中运行命令
save将一个或多个镜像保存到 tar 存档(默认流式传输到 STDOUT)
searchDocker Hub 中搜索镜像
start启动一个或多个停止的容器
stats显示容器资源使用统计的实时流
stop停止一个或多个正在运行的容器
tag创建一个引用 SOURCE_IMAGE 的标记 TARGET_IMAGE
top显示容器的运行进程
unpause取消暂停一个或多个容器中的所有进程
update更新一个或多个容器的配置
version显示 Docker 版本信息
wait阻塞直到一个或多个容器停止,然后打印它们的退出代码

docker 管理命令

:-:-
docker builder管理构建
docker buildx*Docker Buildx(Docker Inc.,v0.7.1)
docker compose*Docker Compose(Docker Inc.,v2.2.3)
docker config管理 Docker 配置
docker container管理容器
docker context管理上下文
docker image管理镜像
docker manifest管理 Docker 镜像清单和清单列表
docker network管理网络
docker node管理 Swarm 节点
docker plugin管理插件
docker scan*Docker 扫描(Docker Inc.,v0.16.0)
docker secret管理 Docker 机密
docker service管理服务
docker stack管理 Docker 堆栈
docker swarm管理群
docker system管理 Docker
docker trust管理对 Docker 映像的信任
docker volume管理卷

docker 全局参数

    --config string     # 客户端配置文件的位置(默认“~/.docker”)
-c, --context string    # 用于连接到守护程序的上下文的名称(
                        # 覆盖 DOCKER_HOST 环境变量和使用
                        # “docker context use” 设置的默认上下文)
-D, --debug             # 启用调试模式
-H, --host list         # 要连接的守护进程套接字
-l, --log-level string  # 设置日志级别
        # (默认“info”) ("debug"|"info"|"warn"|"error"|"fatal") 
    --tls               # 使用 TLS; 由 --tlsverify 暗示
    --tlscacert string  # 仅由该 CA 签署的信任证书
        #(默认为“~/.docker/ca.pem”)
    --tlscert string    # TLS证书文件路径
        #(默认“~/.docker/cert.pem”)
    --tlskey string     # TLS 密钥文件的路径
        #(默认为“~/.docker/key.pem”)
    --tlsverify         # 使用 TLS 并验证远程
-v, --version           # 打印版本信息并退出

docker images

-a, --all             显示所有镜像(默认隐藏中间镜像)
    --digests         显示摘要
-f, --filter filter   根据提供的条件过滤输出
    --format string   使用 Go 模板打印漂亮的镜像
    --no-trunc        不要截断输出
-q, --quiet           仅显示镜像 ID

docker run/create

    --add-host list            # 添加自定义主机到 IP 映射 (host:ip)
-a, --attach list              # 连接到 STDIN、STDOUT 或 STDERR
    --blkio-weight uint16      # 块 IO(相对权重),介于 10 和 1000 之间,或 0 禁用(默认 0)
    --blkio-weight-device list # 块 IO 权重(相对设备权重)(默认 [])
    --cap-add list             # 添加 Linux 功能
    --cap-drop list            # 放弃 Linux 功能
    --cgroup-parent string     # 容器的可选父 cgroup
    --cgroupns string          # 要使用的 Cgroup 命名空间(主机|私有)
                               #  'host':    在 Docker 主机的 cgroup 命名空间中运行容器
                               #  'private': 在自己的私有 cgroup 命名空间中运行容器
                               #  '':        使用由守护进程上的 
                               #        default-cgroupns-mode 选项配置的 cgroup 命名空间(默认)
    --cidfile string           # 将容器 ID 写入文件
    --cpu-period int           # 限制 CPU CFS(完全公平调度器)周期
    --cpu-quota int            # 限制 CPU CFS(完全公平调度器)配额
    --cpu-rt-period int        # 以微秒为单位限制 CPU 实时周期
    --cpu-rt-runtime int       # 以微秒为单位限制 CPU 实时运行时间
-c, --cpu-shares int           # CPU 份额(相对权重)
    --cpus decimal             # CPU 数量
    --cpuset-cpus string       # 允许执行的 CPU (0-3, 0,1)
    --cpuset-mems string       # 允许执行的 MEM (0-3, 0,1)
    --device list              # 将主机设备添加到容器
    --device-cgroup-rule list  # 将规则添加到 cgroup 允许的设备列表
    --device-read-bps list     # 限制设备的读取速率(每秒字节数)(默认 [])
    --device-read-iops list    # 限制设备的读取速率(每秒 IO)(默认 [])
    --device-write-bps list    # 限制设备的写入速率(每秒字节数)(默认 [])
    --device-write-iops list   # 限制设备的写入速率(每秒 IO)(默认 [])
    --disable-content-trust    # 跳过镜像验证(默认为 true)
    --dns list                 # 设置自定义 DNS 服务器
    --dns-option list          # 设置 DNS 选项
    --dns-search list          # 设置自定义 DNS 搜索域
    --domainname string        # 容器 NIS 域名
    --entrypoint string        # 覆盖镜像的默认入口点
-e, --env list                 # 设置环境变量
    --env-file list            # 读入环境变量文件
    --expose list              # 公开一个端口或一系列端口
    --gpus gpu-request         # 要添加到容器中的 GPU 设备(“全部”以传递所有 GPU)
    --group-add list           # 添加其他组以加入
    --health-cmd string        # 运行以检查运行状况的命令
    --health-interval duration # 运行检查之间的时间 (ms|s|m|h) (默认 0s)
    --health-retries int           # 需要报告不健康的连续失败
    --health-start-period duration # 开始健康重试倒计时之前容器初始化的开始时间(ms|s|m|h)(默认 0s)
    --health-timeout duration      # 允许运行一项检查的最长时间 (ms|s|m|h) (默认 0s)
    --help                     # 打印使用
-h, --hostname string          # 容器主机名
    --init                     # 在容器内运行一个 init 来转发信号并收获进程
-i, --interactive              # 即使没有连接,也保持 STDIN 打开
    --ip string                # IPv4 地址(例如 172.30.100.104)
    --ip6 string               # IPv6 地址(例如,2001:db8::33)
    --ipc string               # 要使用的 IPC 模式
    --isolation string         # 容器隔离技术
    --kernel-memory bytes      # 内核内存限制
-l, --label list               # 在容器上设置元数据
    --label-file list          # 读入以行分隔的标签文件
    --link list                # 添加到另一个容器的链接
    --link-local-ip list       # 容器 IPv4/IPv6 链路本地地址
    --log-driver string        # 容器的日志记录驱动程序
    --log-opt list             # 日志驱动程序选项
    --mac-address string       # 容器 MAC 地址(例如 92:d0:c6:0a:29:33)
-m, --memory bytes             # 内存限制
    --memory-reservation bytes # 内存软限制
    --memory-swap bytes        # 交换限制等于内存加上交换:'-1' 启用无限交换
    --memory-swappiness int    # 调整容器内存交换(0 到 100)(默认 -1)
    --mount mount              # 将文件系统挂载附加到容器
    --name string              # 为容器分配名称
    --network network          # 将容器连接到网络
    --network-alias list       # 为容器添加网络范围的别名
    --no-healthcheck           # 禁用任何容器指定的 HEALTHCHECK
    --oom-kill-disable         # 禁用 OOM 杀手
    --oom-score-adj int        # 调整主机的 OOM 首选项(-1000 到 1000)
    --pid string               # 要使用的 PID 命名空间
    --pids-limit int           # 调整容器 pids 限制(设置 -1 表示无限制)
    --platform string          # 如果服务器支持多平台,则设置平台
    --privileged               # 授予此容器扩展权限
-p, --publish list             # 将容器的端口发布到主机
-P, --publish-all              # 将所有暴露的端口发布到随机端口
    --pull string              # 创建前拉取镜像("always"|"missing"|"never")(默认"missing")
    --read-only                # 将容器的根文件系统挂载为只读
    --restart string           # 容器退出时应用的重启策略(默认“否”)
    --rm                       # 容器退出时自动移除
    --runtime string           # 用于此容器的运行时
    --security-opt list        # 安全选项
    --shm-size bytes           # /dev/shm 的大小
    --stop-signal string       # 停止容器的信号(默认“SIGTERM”)
    --stop-timeout int         # 停止容器的超时(以秒为单位)
    --storage-opt list         # 容器的存储驱动程序选项
    --sysctl map               # Sysctl 选项(默认 map[])
    --tmpfs list               # 挂载 tmpfs 目录
-t, --tty                      # 分配一个伪 TTY
    --ulimit ulimit            # ulimit 选项(默认 [])
-u, --user string              # 用户名或 UID(格式:<name|uid>[:<group|gid>])
    --userns string            # 要使用的用户命名空间
    --uts string               # 要使用的 UTS 命名空间
-v, --volume list              # 绑定挂载卷
    --volume-driver string     # 容器的可选卷驱动程序
    --volumes-from list        # 从指定容器挂载卷
-w, --workdir string           # 容器内的工作目录

run/create 大部分参数一致

修改Docker镜像拉取地址

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1ojaslt1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

修改 Docker 数据存储路径

  • 停止 Docker 服务:

    sudo systemctl stop docker
    
  • 将现有的 Docker 数据移动到新的目录:

    sudo mv /var/lib/docker /new/path/docker
    
  • 更新 Docker 的配置文件 /etc/docker/daemon.json,添加或修改 data-root 选项:

    { "data-root": "/new/path/docker" }
    
  • 重新启动 Docker 服务:

    sudo systemctl start docker
    

⚠️注意:当你执行此操作时,旧的容器和镜像可能无法正常工作,因为它们的路径已更改。建议在部署 Docker 时执行此操作,以避免这些问题。如有必要,重新启动容器或重新创建它们,以确保它们的配置指向新的路径。

Docker降级版本的方法

yum downgrade --setopt=obsoletes=0 \
    -y docker-ce-${version} docker-ce-selinux-${version}

${version} 指定要降级的版本

Docker 常用示例

Docker Web 管理工具 portainer

$ docker run -d --name portainer \
  -p 8000:8000 \
  -p 9443:9443 \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $HOME/portainer:/data \
    portainer/portainer-ee:latest

Nginx

docker run -itd -p 80:80 --restart=always --name Nginx \
-v $HOME/nginx_data/html:/usr/share/nginx/html \
-v $HOME/nginx_data/conf:/etc/nginx/conf.d \
-v $HOME/nginx_data/nginx.conf:/etc/nginx/nginx.conf \
nginx
参数解释
  • -itd: 启动容器并保持后台运行
  • -p 80:80: 将主机的 80 端口映射到容器的 80 端口,用于访问 Nginx 站点页面
  • --name Nginx: 给容器指定一个名称为 "Nginx"
  • --restart=always: 在容器退出时,总是重新启动容器
持久化解释
----
-v $HOME/nginx_data/html:/usr/share/nginx/html将容器中的 Nginx 站点页面路径映射到本地
-v $HOME/nginx_data/conf:/etc/nginx/conf.d将容器中的 Nginx 虚拟主机配置文件路径映射到本地 (需要提前准备好文件)
-v $HOME/nginx_data/nginx.conf:/etc/nginx/nginx.conf将容器中的 Nginx 主配置文件路径映射到本地 (需要提前准备好文件)

Tomcat

docker run -itd -p 8080:8080 --restart=always \
--name Tomcat \
-v $HOME/Tomcat_data/webapps:/usr/local/tomcat/webapps/ROOT \
tomcat
参数解释
  • -itd: 以后台运行的方式启动容器,并分配一个伪终端(pseudo-TTY)和保持 STDIN 打开
  • -p 8080:8080: 将主机的端口 8080 映射到容器的 8080 端口,用于访问 Tomcat 站点页面
  • --name Tomcat: 为容器指定名称为 "Tomcat"
  • --restart=always: 当容器退出时,总是重新启动容器
持久化解释

将容器中的 /usr/local/tomcat/webapps/ROOT 路径挂载到宿主机中的 $HOME/Tomcat_data/webapps 目录下。

Weblogic

docker run -itd \
-p 7001:7001 \
-p 7002:7002 \
-p 5556:5556 \
--restart=always --name Weblogic ismaleiva90/weblogic12

注意:ismaleiva90/weblogic12 是非官方或认证的 Docker 镜像!

参数解释
  • -itd: 后台运行容器,保持 STDIN 打开
  • -p 7001:7001: 映射主机 7001 端口到容器 7001 端口,访问 Weblogic 控制台页面
  • -p 7002:7002: 映射主机 7002 端口到容器 7002 端口,访问 Weblogic 站点页面
  • -p 5556:5556: 映射主机 5556 端口到容器 5556 端口,访问 Weblogic 站点页面
  • --name Weblogic: 容器名称为 "Weblogic"
  • --restart=always: 容器退出时,总是重新启动容器

MySQL

docker run -d -it -p 3306:3306 --name MySQL --restart=always \
-v $HOME/MySQL_Data/data:/var/lib/mysql \
-v $HOME/MySQL_Data/conf:/etc/mysql/conf.d \
--privileged=true \
-e MYSQL_DATABASE='test_db' \
-e MYSQL_ROOT_PASSWORD='abc$123' \
-e MYSQL_USER='testuser' -e MYSQL_PASSWORD='abc$123' \
mysql:8.0.31 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci
参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 3306:3306将主机的端口映射到容器的端口,这里是将主机的 3306 端口映射到容器的 3306 端口,用于访问 MySQL 数据库
--name MySQL为容器指定一个名称,这里是 "MySQL"
--restart=always表示当容器退出时,总是重新启动容器
--privileged=true若不加字段--privileged=true可能会报权限错误
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci这两个选项参数是改变所有表的默认编码和排序规则以使用 UTF-8 (utf8mb4)
持久化解释
----
-v $HOME/MySQL_Data/data:/var/lib/mysql将容器中的 MySQL 数据库数据存储到本地,以确保在容器重启时数据得以保留。
-v $HOME/MySQL_Data/conf:/etc/mysql/conf.d将容器中的 MySQL 自定义配置文件路径映射到本地,以方便自定义配置。请确保提前准备好文件,否则可能会启动失败
环境变量解释
----
MYSQL_ROOT_PASSWORD 【必填】必需的变量,用于指定 MySQL 的 root 超级用户帐户的密码。如果设置了 MYSQL_RANDOM_ROOT_PASSWORD=yes ,则会随机生成一个密码,并打印到 stdout。
MYSQL_USER 【可选】可选变量,用于创建新用户。此用户将被授予指定数据库的超级用户权限。需要同时设置 MYSQL_PASSWORD 变量。
MYSQL_PASSWORD 【可选】可选变量,用于创建新用户并设置密码。此用户将被授予指定数据库的超级用户权限。需要同时设置 MYSQL_USER 变量。
MYSQL_DATABASE 【可选】可选变量,允许在容器启动时指定要创建的数据库的名称。如果设置了 MYSQL_USERMYSQL_PASSWORD,则该用户将被授予对此数据库的超级用户访问权限。

Oracle

docker run -d -it -p 1521:1521 --name Oracle_11g --restart=always \
--mount source=oracle_vol,target=/home/oracle/app/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

注意:registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 是非官方或认证的Docker镜像!

参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 1521:1521将主机的端口映射到容器的端口,这里是将主机的 1521 端口映射到容器的 1521 端口,用于访问 Oracle 数据库
--name Oracle_11g为容器指定一个名称,这里是 "Oracle_11g"
--restart=always表示当容器退出时,总是重新启动容器
持久化解释
----
--mount source=oracle_vol,target=/home/oracle/app/oracle/oradata将名为 "oracle_vol" 的 Docker 卷挂载到容器中的 "/home/oracle/app/oracle/oradata" 路径。这样做的目的是将 Oracle 数据库的数据存储在持久化的卷中,以便数据在容器重启时得以保留

PostgreSQL

docker run -d -p 5432:5432 --restart=always --name PostgreSQL \
-e POSTGRES_USER='postgres' \
-e POSTGRES_PASSWORD='abc$123' \
-e POSTGRES_DB='test' \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $HOME/Postgres_Data:/var/lib/postgresql/data \
-d postgres
参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 5432:5432将主机的端口映射到容器的端口,这里是将主机的 5432 端口映射到容器的 5432 端口,用于访问 Postgre 数据库
--name PostgreSQL为容器指定一个名称,这里是 "PostgreSQL"
--restart=always表示当容器退出时,总是重新启动容器
持久化解释
----
-v $HOME/Postgres_Data:/var/lib/postgresql/data将到容器中的 "/var/lib/postgresql/data" 路径映射挂载到 宿主机中的 ”$HOME/Postgres_Data“目录下,这样做的目的是将 Postgre 数据库的数据存储在本地中,以便数据在容器重启时得以保留
环境变量解释
----
POSTGRES_PASSWORD 【必填】PostgreSQL 映像所需的环境变量。设置 PostgreSQL 超级用户的密码。不能为空或未定义。
POSTGRES_USER 【可选】可选环境变量,用于创建用户及其密码。创建具有超级用户权限的指定用户和同名的数据库。默认用户是 "postgres"。
POSTGRES_DB 【可选】可选环境变量,用于定义首次启动映像时创建的默认数据库的名称。默认值是 POSTGRES_USER 的值,如果未设置,则默认为 "postgres"。
PGDATA 【可选】默认为 /var/lib/postgresql/data。如果使用的数据卷是文件系统挂载点或无法被用户 chowned 的远程文件夹,则需要设置此环境变量以包含数据。

达梦

docker run -d -p 5236:5236 --restart=always --name DaMengDB \
--privileged=true \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e EXTENT_SIZE=32 \
-e BLANK_PAD_MODE=1 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e INSTANCE_NAME=dm8_test \
-v $HOME/DaMeng_Data:/opt/dmdbms/data \
if010/dameng

注意:if010/dameng 是从官网下载上传至 Docker Hub 的镜像!

参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 5236:5236将主机的端口映射到容器的端口,这里是将主机的 5236 端口映射到容器的 5236 端口,用于访问达梦数据库
--name DaMengDB为容器指定一个名称,这里是 "DaMengDB"
--restart=always表示当容器退出时,总是重新启动容器
持久化解释
----
-v $HOME/DaMeng_Data:/opt/dmdbms/data将容器中的达梦数据库数据存储路径 "/opt/dmdbms/data" 映射到本地主机的 "$HOME/DaMeng_Data" 目录,以确保在容器重启时数据得以保留

人大金仓

docker run -idt -p 5432:54321 --restart=always \
--name Kingbase --privileged=true \
-e DB_MODE=oracle \
-e NEED_START=yes \
-e DB_USER=kingbase \
-e DB_PASSWORD=abc123 \
-e ENABLE_CI=yes \
-v $HOME/Kingbase_Data:/home/kingbase/userdata \
if010/kingbase:v009r001c001b0025 /usr/sbin/init

注意:if010/kingbase:v009r001c001b0025 是从官网下载上传至 Docker Hub 的镜像,官网提供了两个下载版本,一个是 v008r006c008b0014,另一个是 v009r001c001b0025,可以拉取对应的 tag 镜像进行测试使用!

参数解释
----
-itd以后台方式启动容器,保持 STDIN 打开
-p 5432:54321将主机的 5432 端口映射到容器的 5432 端口,访问数据库
--name Kingbase给容器指定名称为 "Kingbase"
--restart=always容器退出时,总是重新启动容器
持久化解释
----
-v $HOME/Kingbase_Data:/home/kingbase/userdata将容器中的人大金仓数据库数据存储路径 "/home/kingbase/userdata" 映射到本地主机的 "$HOME/Kingbase_Data" 目录,以确保在容器重启时数据得以保留
环境变量解释
----
DB_USER 【可选】设置用户及其密码,默认为 "system"
DB_PASSWORD 【可选】设置用户密码,默认为 "123456"
DB_MODE 【可选】设置数据库模式,支持的模式有 oracle、pg、mysql
NEED_START 【可选】设置进入容器后是否启动数据库,默认为 "yes"
ENABLE_CI 【可选】设置是否需要配置大小写敏感,默认为 "yes"

Redis

docker run -d -p 6379:6379 --restart=always --name Redis \
-v $HOME/Redis_Data/conf:/usr/local/etc/redis \
-v $HOME/Redis_Data/data:/data \
redis redis-server /usr/local/etc/redis/redis.conf
参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 6379:6379将主机的端口映射到容器的端口,这里是将主机的 6379 端口映射到容器的 6379 端口,用于访问 Redis 数据库
--name Redis为容器指定一个名称,这里是 "Redis"
--restart=always表示当容器退出时,总是重新启动容器
持久化解释
----
-v $HOME/Redis_Data/conf:/usr/local/etc/redis(需提前准备好文件,否则可能会启动失败) 将到容器中的 "/usr/local/etc/redis" 路径映射挂载到 宿主机中的"$HOME/Redis_Data/conf"目录下,这样子做的目的是可以自定义Redis的配置文件
-v $HOME/Redis_Data/data:/data将到容器中的 "/data" 路径映射挂载到 宿主机中的"$HOME/Redis_Data/data"目录下,这样做的目的是将 Redis 数据库的数据存储在本地中,以便数据在容器重启时得以保留
关于启动命令
----
redis-server /usr/local/etc/redis/redis.conf容器内部执行该命令是为了按照我们自定义的配置文件启动,这个不是必须的!!!

Memcache

docker run -d -p 11211:11211 --name Memcached \
    --restart=always memcached memcached -m 64
参数解释
  • -d: 以后台方式启动容器。
  • -it: 分配一个伪终端(pseudo-TTY)并保持 STDIN 打开。
  • -p 11211:11211: 将主机的 11211 端口映射到容器的 11211 端口,用于访问 Memcached 消息队列的 web 管理界面。
  • --name Memcached: 容器的名称为 "Memcached"。
  • --restart=always: 容器退出时,总是重新启动容器。
命令执行解释
  • memcached -m 64 这会将 Memcached 服务器设置为使用 64 MB 进行存储

MongoDB

docker run -d -p 27017:27017 --restart=always --name MongoDB \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=abc123 \
-v $HOME/MongoDB_Data/data:/data/db \
-v $HOME/MongoDB_Data/conf:/etc/mongo \
mongo --config /etc/mongo/mongod.conf --wiredTigerCacheSizeGB 1.5
参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 27017:27017将主机的端口映射到容器的端口,这里是将主机的 27017 端口映射到容器的 27017 端口,用于访问 MongoDB 数据库
--name MongoDB为容器指定一个名称,这里是 "MongoDB"
--restart=always表示当容器退出时,总是重新启动容器
--config /etc/mongo/mongod.conf指定配置文件路径 (这个不是必须的,设置此选项之前需准备好mongod.conf文件映射到Docker内部)
--wiredTigerCacheSizeGB 1.5设置WiredTiger缓存大小限制为1.5G
持久化解释
----
-v $HOME/MongoDB_Data/conf:/etc/mongo将到容器中的 "/etc/mongo" 路径映射挂载到 宿主机中的"$HOME/MongoDB_Data/conf"目录下,这样子做的目的是可以自定义MongoDB的配置文件 (需提前准备好文件,否则可能会启动失败)
-v $HOME/Redis_Data/data:/data将到容器中的 "/data/db" 路径映射挂载到 宿主机中的"$HOME/MongoDB_Data/data"目录下,这样做的目的是将 MongoDB 数据库的数据存储在本地中,以便数据在容器重启时得以保留
环境变量解释
----
MONGO_INITDB_ROOT_USERNAME 【可选】该变量是创建管理员用户,该用户是在 admin 身份验证数据库中创建的,并被赋予角色 root,这是一个"超级用户"角色。
MONGO_INITDB_ROOT_PASSWORD 【可选】该变量是为创建管理员用户设置密码,需配合 MONGO_INITDB_ROOT_USERNAME 变量参数使用

RabbitMQ

docker run -itd -p 15672:15672 --name RabbitMQ \
--hostname rmq-test \
-e RABBITMQ_DEFAULT_VHOST=rmq-test \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=abc123 \
rabbitmq:3-management 
参数解释
----
-itd表示以后台运行的方式启动容器,并分配一个伪终端(pseudo-TTY)和保持 STDIN 打开
-p 15672:15672将主机的端口映射到容器的端口,这里是将主机的 15672 端口映射到容器的 15672 端口,用于访问 RabbitMQ 控制台页面,内部除了该端口外,还开了4369/tcp、5671-5672/tcp、15671/tcp、15691-15692/tcp、25672/tcp
--name RabbitMQ为容器指定一个名称,这里是 "RabbitMQ"
--restart=always表示当容器退出时,总是重新启动容器
--hostname设置容器主机名称
环境变量解释
----
RABBITMQ_DEFAULT_VHOST 【可选】该变量是可选的,是设置 RabbitMQ 的主机名称
RABBITMQ_DEFAULT_USER 【可选】该变量是可选的,是设置 RabbitMQ 的账户
RABBITMQ_DEFAULT_PASS 【可选】该变量是可选的,是设置 RabbitMQ 的密码

远程协助工具 Guacd

docker run -d -p 4822:4822 --privileged=true \
    --restart=always --name Guacd \
    -e LANG=zh_CN.UTF-8 \
    -v /docker_data/Guacd/rdp-rec:/rdp-rec \
    -v /docker_data/Guacd/rdp-file:/rdp-file \
    guacamole/guacd
参数解释
----
-d表示以后台运行的方式启动容器
-it分别表示分配一个伪终端(pseudo-TTY)并保持 STDIN 打开
-p 4822:4822将主机的端口映射到容器的端口,这里是将主机的 4822 端口映射到容器的 4822 端口,用于访问 Guacd远程的API接口
--name Guacd为容器指定一个名称,这里是 "Guacd"
--restart=always表示当容器退出时,总是重新启动容器
--privileged=true若不加字段--privileged=true可能会报权限错误
持久化解释
----
-v /docker_data/Guacd/rdp-rec:/rdp-rec代码内固定配置,guacd服务rdp录屏文件存放路径
-v /docker_data/Guacd/rdp-file:/rdp-file代码内固定配置,guacd服务rdp远程磁盘文件存放路
环境变量解释
  • LANG 设置字符编码格式

在线代码编辑器 Code Server

$ mkdir -p ~/.config
$ docker run -it --name code-server  \
  -p 127.0.0.1:8080:8080 \
  -v "$HOME/.config/code-server:/home/coder/.config" \
  -v "$PWD:/home/coder/project" \
  -u "$(id -u):$(id -g)" \
  -e "DOCKER_USER=$USER" \
    codercom/code-server:latest

媒体管理工具 Dim

$ docker run --name my-dim \
   -p 8000:8000/tcp \
   -v $HOME/.config/dim:/opt/dim/config \
   -v $HOME/dim/media:/media:ro \
   -d ghcr.io/dusk-labs/dim:dev

Gitlab

$ docker run -d --name gitlab \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8081:80 -p 2222:22 \
  --restart always \
  --volume $HOME/gitlab/config:/etc/gitlab \
  --volume $HOME/gitlab/logs:/var/log/gitlab \
  --volume $HOME/gitlab/data:/var/opt/gitlab \
  -v /etc/localtime:/etc/localtime \
  --shm-size 256m \
    gitlab/gitlab-ce:latest

标签:容器,教程,--,最全,nginx,镜像,Docker,docker
From: https://blog.csdn.net/Young_Pro/article/details/141142163

相关文章

  • 安卓手机使用Termux搭建Hexo博客网站并发布公网远程访问实战教程
    文章目录前言1.安装Hexo2.安装cpolar3.远程访问4.固定公网地址前言本文主要介绍如何在安卓手机平板中使用Termux安装个人hexo博客并结合cpolar内网穿透工具配置公网地址,实现无公网IP环境也能随时随地远程访问本地搭建的网站。Hexo是一个用Nodejs编写的快速、简......
  • 【PostgreSQL教程】PostgreSQL GROUP BY 语句
    博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。感兴趣的可以先......
  • Windows10下Docker安装Mysql5.7
    一、环境说明:docker:v4.25.0mysql:5.7二、 打开命令工具打开WindowsPowerShell 三、搜索镜像dockersearchmysql  四、拉取镜像拉取最新版本dockerpullmysql 拉取特定版本dockerpullmysql:5.7 五、查看所有镜像dockerimages 六、启......
  • Docker 的基本概念和优势,以及在应用程序开发中的实际应用
    Docker是一种用于虚拟化和部署应用程序的开源平台,它采用容器化技术,可以将应用程序及其依赖项打包成一个独立的、可移植的容器。以下是Docker的基本概念和优势:容器:Docker利用操作系统层面的虚拟化技术,将应用程序及其依赖项打包成一个独立的容器。每个容器都是独立的、可互......
  • 系统报错影响美观?gdiplus.dll修复教程,拯救小鸟壁纸加载
    系统报错,特别是gdiplus.dll文件丢失,确实会影响小鸟壁纸等软件的正常加载,进而影响桌面美观。为了解决这个问题,以下是一个详细的gdiplus.dll修复教程,旨在帮助您拯救小鸟壁纸的加载问题:一、了解gdiplus.dll文件gdiplus.dll是Windows系统中用于图形用户界面(GUI)渲染的重要组件,......
  • 软件著作权申请教程(超详细)(2024新版)软著申请
        目录一、注册账号与实名登记二、材料准备三、申请步骤1.办理身份2.软件申请信息3.软件开发信息4.软件功能与特点5.填报完成一、注册账号与实名登记    首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】的身份。中国版权保护......
  • 博途TIA Portal V18 V19软件下载及安装教程
    TIAPortal(TotallyIntegratedAutomationPortal)是西门子开发的一款综合自动化软件平台,广泛应用于工业自动化领域。该平台为用户提供了一个统一的工程环境,用于编程、组态、仿真和调试西门子多种自动化产品,如PLC、HMI、驱动器等。TIAPortal的目标是简化工程设计流程,提高效率和......
  • 「实用软件」CAXA工艺图表2023最新下载附安装教程
    CAXA工艺图表2023是由中国航天科工信息技术研究院(CAXA)开发的一款专注于工艺设计和管理的软件。该软件旨在为制造业提供高效的工艺设计、工艺过程管理和工艺文件生成等功能,帮助企业提高生产效率、优化工艺流程和确保产品质量。软件介绍工艺设计:CAXA工艺图表2023提供了强大......
  • iPhone卡在iTunes图标界面?最全教程帮你快速修复恢复模式问题
    引言iPhone手机卡在iTunes图标界面(也称为恢复模式界面)是用户可能遇到的一个常见问题。通常,这种情况发生在设备升级、恢复或越狱失败时,导致手机无法正常启动。面对这种情况,很多用户可能感到手足无措。本文将详细介绍iPhone卡在iTunes图标界面的原因,并提供几个有效的解决......
  • 如何解决因内存不足导致的 iPhone 白苹果问题:原因解析与修复教程
    引言在使用iPhone的过程中,许多用户可能遇到过“白苹果”现象,即设备启动时只显示白色的Apple标志,却无法进入系统。这种情况通常让人感到困惑和担忧,尤其是当重要数据似乎无法访问时。本文将探讨内存不足导致iPhone白苹果的原因,并提供详细的修复教程,帮助你恢复设备正常运行......