Docker基础学习
2026/4/17 4:50:32 网站建设 项目流程

基础知识

Docker是一个开源的应用容器引擎

1.Docker基础介绍

1.安装Docker

2.架构

镜像(Image)

容器(Container)

仓库

3.镜像加速器

安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce

  1. 配置镜像加速器
    针对Docker客户端版本大于 1.10.0 的用户

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

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

Docker命令

1.启动

systemctl start docker

2.停止

systemctl stop docker

3.重启

systemctl restart docker

4.查看docker服务状态

systemctl status docker

5.开机自启动

systemctl enable docker

Docker镜像命令

1.查看镜像

docker images docker images -q #查看所有镜像的id

2.搜索镜像

docker search 镜像名称

3.拉取镜像

docker pull 镜像名称

4.删除镜像

docker rmi 镜像id docker rmi 'docker images -q' #删除全部镜像

Docker容器命令

1.查看容器

docker ps #查看正在运行的容器 docker ps -a #查看所有容器

2.创建并启动容器

docker run 参数

3.停止容器

docker stop 容器名称

4.进入容器

docker exec 参数 #退出容器,容器不会关闭

5.启动容器

docker start 容器名称

6.删除容器

docker rm 容器名称

7.查看容器信息

docker inspect 容器名称

容器的数据卷

1.配置数据卷

docker run ... -v 宿主机目录:容器目录

2.两个容器挂载同一个数据卷

多容器进行数据交换

数据卷容器

docker run -it --name=c3 -v /volume

3.多个数据卷载在同一个容器

Docker部署应用

1.mysql

以下是图片中展示的 Docker 部署 MySQL 的命令与说明文字:

1. 前置目录准备

/root目录下创建mysql目录用于存储 MySQL 数据信息:

mkdir~/mysqlcd~/mysql
2. 启动 MySQL 容器命令
dockerrun-id\-p3307:3306\--name=c_mysql\-v$PWD/conf:/etc/mysql/conf.d\-v$PWD/logs:/logs\-v$PWD/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=123456\mysql:5.6
3. 参数说明
  • -p 3307:3306:将容器的3306端口映射到宿主机的3307端口。
  • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf配置目录。
  • -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs日志目录。
  • -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录。
  • -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码。

以上命令和参数说明展示了如何在 Docker 中部署 MySQL 服务。


2.tomcat

这张图片展示的是在 Docker 环境中部署 Tomcat 服务的步骤,包含目录准备容器启动命令参数说明外部访问验证四个部分,以下是详细分析:

步骤 1:准备 Tomcat 数据目录
# 在/root目录下创建tomcat目录用于存储tomcat数据信息mkdir~/tomcatcd~/tomcat
  • 作用:在主机(宿主机)的用户主目录(~)下创建tomcat文件夹,用于后续挂载 Tomcat 的 Web 应用目录(如存放网页、项目文件)。
  • 逻辑:通过mkdir创建目录,cd切换到该目录,为后续的卷挂载(-v)做准备。
步骤 2:启动 Tomcat 容器
dockerrun-id\-p8080:8080\-v$PWD:/usr/local/tomcat/webapps\tomcat
  • docker run:创建并启动一个新的容器。
  • -id:组合参数,-i保持标准输入(STDIN)打开,-d让容器在后台运行(守护模式)。
  • -p 8080:8080:端口映射,将容器的 8080 端口映射到主机的 8080 端口(Tomcat 默认使用 8080 端口提供 Web 服务)。
  • -v $PWD:/usr/local/tomcat/webapps:卷挂载,将主机当前目录$PWD表示当前工作目录,即~/tomcat)挂载到容器的/usr/local/tomcat/webapps目录(Tomcat 存放 Web 应用的默认目录)。
  • tomcat:指定使用的 Docker 镜像,Docker 会自动从 Docker Hub 拉取tomcat镜像(默认最新版)。
步骤 3:参数说明
  • -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口,确保外部可通过主机的 8080 端口访问容器内的 Tomcat 服务。
  • -v $PWD:/usr/local/tomcat/webapps:将主机当前目录挂载到容器的 webapps 目录,实现主机与容器的文件共享——在主机的~/tomcat目录下放入网页文件(如test/a.html),容器内的 Tomcat 会自动识别并提供服务。
步骤 4:外部访问验证

在浏览器中访问http://192.168.149.135:8080/test/a.html192.168.149.135是主机 IP),页面显示hello tomcat docker,说明:

  • Tomcat 容器启动成功,且端口映射(8080:8080)生效,外部可访问。
  • 卷挂载(-v)生效:主机~/tomcat目录下的test/a.html被容器识别,Tomcat 正常提供该页面的服务。
核心逻辑总结

通过目录准备容器启动(端口映射 + 卷挂载)外部访问验证,实现 Tomcat 服务的快速部署:

  • 端口映射(-p):解决“外部如何访问容器服务”的问题。
  • 卷挂载(-v):解决“主机与容器如何共享文件”的问题(如部署网页、项目)。
潜在优化点(可选)
  • 镜像版本:若需指定 Tomcat 版本,可在tomcat后加标签(如tomcat:8.5),避免默认拉取最新版带来的兼容性问题。
  • 目录结构:可在主机~/tomcat下创建test目录,并放入a.html,确保文件路径与访问 URL 一致。

通过以上步骤,可快速在 Docker 中部署一个支持外部访问、且与主机共享文件的 Tomcat 服务。


3.nigx

这张图片展示的是在 Docker 中部署 Nginx 服务的步骤,包含目录准备配置文件编写容器启动命令参数说明四个部分。以下是补全后的完整内容:

1. 准备 Nginx 数据目录
# 在/root目录下创建nginx目录用于存储nginx数据信息mkdir~/nginxcd~/nginxmkdirconfcdconf
  • 作用:在主机(宿主机)的用户主目录(~)下创建nginx文件夹,并在其中创建conf子目录,用于存放 Nginx 的配置文件。
2. 编写 Nginx 配置文件
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容vimnginx.conf

补全后的nginx.conf内容如下:

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
  • 说明:这是 Nginx 的基础配置文件,定义了用户、工作进程数、错误日志、PID 文件、事件处理、HTTP 服务等核心配置。
3. 启动 Nginx 容器
dockerrun-id\-p80:80\-v$PWD/conf/nginx.conf:/etc/nginx/nginx.conf\-v$PWD/logs:/var/log/nginx\-v$PWD/html:/usr/share/nginx/html\--name=c_nginx\nginx
  • docker run:创建并启动一个新的容器。
  • -id:组合参数,-i保持标准输入(STDIN)打开,-d让容器在后台运行(守护模式)。
  • -p 80:80:端口映射,将容器的 80 端口映射到主机的 80 端口。
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的conf/nginx.conf挂载到容器的/etc/nginx/nginx.conf,覆盖容器内的默认配置文件。
  • -v $PWD/logs:/var/log/nginx:将主机当前目录下的logs目录挂载到容器的/var/log/nginx,用于存放 Nginx 的日志文件。
  • -v $PWD/html:/usr/share/nginx/html:将主机当前目录下的html目录挂载到容器的/usr/share/nginx/html,用于存放静态网页文件。
  • --name=c_nginx:为容器指定名称c_nginx
  • nginx:指定使用的 Docker 镜像,Docker 会自动从 Docker Hub 拉取nginx镜像(默认最新版)。
4. 参数说明
  • -p 80:80:将容器的 80 端口映射到宿主机的 80 端口,确保外部可通过主机的 80 端口访问容器内的 Nginx 服务。
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的/etc/nginx/nginx.conf,实现自定义配置文件的替换。
  • -v $PWD/logs:/var/log/nginx:将主机当前目录下的logs目录挂载到容器的/var/log/nginx,用于收集 Nginx 的日志信息。
  • -v $PWD/html:/usr/share/nginx/html:将主机当前目录下的html目录挂载到容器的/usr/share/nginx/html,用于存放和访问静态网页文件。
5. 验证部署

启动容器后,可通过浏览器访问http://<主机IP>,若看到 Nginx 的欢迎页面,说明部署成功。

通过以上步骤,你可以在 Docker 中成功部署一个自定义配置的 Nginx 服务,并实现配置文件、日志和静态文件的持久化管理。


4.redis

这张图片展示了使用 Docker 部署 Redis 服务的完整流程,分为四个步骤:搜索镜像、拉取镜像、创建容器并设置端口映射、以及使用外部客户端连接 Redis。以下是每个步骤的详细分析:

1. 搜索 Redis 镜像

命令:

dockersearch redis
  • 作用:在 Docker Hub 上搜索名为redis的镜像。
  • 目的:确认可用的 Redis 镜像版本和官方/社区镜像,为后续拉取做准备。
2. 拉取 Redis 镜像

命令:

dockerpull redis:5.0
  • 作用:从 Docker Hub 拉取指定版本(5.0)的 Redis 镜像。
  • 细节
    • redis是镜像名称。
    • 5.0是镜像标签(tag),表示 Redis 5.0 版本。
    • 如果不指定标签,默认会拉取latest(最新版)。
3. 创建容器并设置端口映射

命令:

dockerrun-id--name=c_redis-p6379:6379 redis:5.0
  • 作用:基于redis:5.0镜像创建并启动一个名为c_redis的容器,并将容器的 6379 端口映射到宿主机的 6379 端口。
  • 参数解析
    • -id:组合参数,-i保持标准输入(STDIN)打开,-d让容器在后台运行(守护模式)。
    • --name=c_redis:为容器指定名称c_redis,便于后续管理和识别。
    • -p 6379:6379:端口映射,将容器的 6379 端口(Redis 默认端口)映射到宿主机的 6379 端口,确保外部可通过宿主机的 6379 端口访问 Redis 服务。
    • redis:5.0:指定使用的镜像,即步骤 2 中拉取的 Redis 5.0 镜像。
4. 使用外部机器连接 Redis

命令:

./redis-cli.exe-h192.168.149.135-p6379
  • 作用:使用 Redis 客户端(redis-cli.exe)连接到部署在外部机器上的 Redis 服务。
  • 参数解析
    • -h 192.168.149.135:指定 Redis 服务的主机 IP 地址(即宿主机的 IP)。
    • -p 6379:指定 Redis 服务的端口(与容器映射的端口一致)。
  • 前提条件
    • 宿主机的防火墙需放行 6379 端口。
    • Redis 服务需允许外部连接(默认情况下 Redis 仅允许本地连接,需修改配置文件redis.conf中的bindprotected-mode等参数)。

DockerFile

1.docker镜像如何制作

1.容器转镜像

2,DockerFile

关键字作用说明
ENV环境变量设置环境变量,可在后续指令或容器运行时使用。
ARG构建参数仅在镜像构建时生效。如果有同名的 ENV,ENV 的值会覆盖 ARG 的值。
VOLUME定义外部可挂载的数据卷指定容器中那些目录可以启动时挂载到文件系统中。启动容器时使用-v绑定格式VOLUME ["目录"]
EXPOSE暴露端口定义容器运行时监听的端口。启动容器时使用-p来绑定端口。格式:EXPOSE 8080或者EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录。如果没有创建则自动创建。如果路径非/开头,则是上一条 WORKDIR 的相对路径。
USER指定执行用户指定构建或者启动的时候用户。在 RUN CMD ENTRYPOINT 执行的时候的用户。
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令。基本上没用,因为很多时候应用本身有健康监测机制。
ONBUILD触发器当存在 ONBUILD 关键字的镜像作为基础镜像的时候,当执行 FROM 完成之后,会执行 ONBUILD 指令。
STOPSIGNAL发送信号量到宿主机该 STOPSIGNAL 指令设置发送到容器的系统调用信号以退出。
SHELL指定执行脚本的 shell指定 RUN CMD ENTRYPOINT 执行命令的时候使用的 shell。
FROM指定基础镜像必须是 Dockerfile 第一条指令,格式:FROM 镜像名[:标签]
RUN执行构建命令在镜像构建时执行命令,每条 RUN 生成新镜像层,支持 Shell/Exec 格式
COPY复制文件/目录将宿主机文件/目录复制到镜像,不支持 URL 和自动解压
ADD扩展复制功能支持自动解压本地压缩包、从 URL 下载文件,但行为较复杂,普通复制推荐用 COPY
CMD容器启动默认命令指定容器启动时默认执行的命令,一个 Dockerfile 仅最后一个 CMD 生效
ENTRYPOINT容器启动入口指定容器启动时执行的可执行文件/命令,与 CMD 配合可实现“固定参数 + 可变参数”

Docker服务编排

一、安装 Docker Compose

图片说明了 Docker Compose 已完全支持 Linux、Mac OS 和 Windows 系统,但安装前需先安装 Docker。安装方式是通过下载预编译的二进制包到 Linux 系统,具体步骤如下:

  • 下载二进制文件
    使用curl命令从 GitHub 下载指定版本(图中为 1.22.0)的docker-compose文件,并保存到/usr/local/bin/目录。

    curl-Lhttps://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname-s`-`uname-m`-o/usr/local/bin/docker-compose
  • 设置可执行权限
    使用chmod +x命令赋予docker-compose可执行权限。

    chmod+x /usr/local/bin/docker-compose
  • 验证安装
    通过docker-compose -version命令查看版本信息,确认安装成功。

二、卸载 Docker Compose

由于是通过二进制包方式安装,卸载只需删除对应的二进制文件即可:

rm/usr/local/bin/docker-compose

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询