文章目录
- [1. Docker介绍](#1. Docker介绍)
- [2. 安装docker - ubuntu版](#2. 安装docker - ubuntu版)
- [3. Docker 容器管理](#3. Docker 容器管理)
-
- 容器介绍:
-
- 查看正在运行的容器:
- 运行容器:
- 停止容器运行:停止一个或多个容器
- 删除容器
- 查看docker日志
- 查看容器属性-获取容器/镜像的元数据。
- 进入容器内命令:
- 其它
-
- 启动一个或多个已经停止的容器
- 重启容器命令
- [暂停/恢复 一个或多个容器中的所有进程](#暂停/恢复 一个或多个容器中的所有进程)
- 查看容器资源使用情况
- [4. Docker 镜像管理](#4. Docker 镜像管理)
-
- 镜像管理介绍
-
- 查看镜像
- 拉取镜像:也就是下载镜像
- 推送镜像
- 删除镜像命令
- [给镜像打 tag 命令 - 给镜像打标签](#给镜像打 tag 命令 - 给镜像打标签)
- 镜像打包和上传命令:
- [Docker 启动Jenkins](#Docker 启动Jenkins)
- Docker搭建Web服务器的Nginx
- Docker搭建mysql
- Docker搭建Jira
- [Docker 搭建 TestLink](#Docker 搭建 TestLink)
- 总结
✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。

本文开始
1. Docker介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker架构
Docker:容器,镜像,仓库 - 三部分组成
Docker 包括三个基本概念:
- 镜像(Image):Docker容器的模板,包含应用程序和其依赖项。每一个镜像都可能依赖一个或多个下层的镜像组成的另一个镜像,AUFS 文件系统。
- 容器(Container):Docker镜像的运行实例。
- 仓库(Registry):用于存储和分享Docker镜像的地方。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
| Docker | 面向对象 |
|---|---|
| 镜像 | 对象 |
| 容器 | 类 |
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
2. 安装docker - ubuntu版
查看ubuntu版本命令:lsb_release -a
获取最新版本Docker包
【注】推荐官方方式安装的包名是 docker-ce,用于正式生产环境,详细查看文档
bash
sudo apt-get update
# 用于学习使用:快速测试、学习、对版本无要求的环境
sudo apt-get install -y docker.io
查看Docker安装成功命令:
bash
docker --version
查看docker运行状态命令:
3. Docker 容器管理
容器介绍:
1.容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。
2.镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态
查看正在运行的容器:
docker ps [options]
bash
# 列出正在运行的容器
docker ps
# 列出正在运行和非正在运行的容器
docker ps -a
# 列出正在运行的容器 过滤出 jenkins
docker ps | grep jenkins
查询出数据的参数解释:
CONTAINER ID:容器的唯一ID
IMAGE:使用的哪一个镜像启动的
COMMAND:容器的启动命令
created:容器的创建时间
status:容器状态
popts:容器的端口信息和使用的连接类型(tcp\udp)
NAMES:自动分配的容器名称
运行容器:
bash
# 指定容器后台运行
docker run -d 容器名称
# 后台运行jenkins, 并重命名为newJenkins
docker run -d --name=newJenkins jenkins/jenkis:lts
参数解释:
--name:为容器指定一个名称
--d:后台运行容器
--p:指定端口映射,格式为:主机(宿主)端口:容器端口
停止容器运行:停止一个或多个容器
docker stop [option]
bash
# 语法格式
docker stop [容器名称/容器Id]
# 根据容器名称停止容器
docker stop newJenkins
# 根据容器Id停止容器
docker stop 容器Id
# 停止多个容器
# 停止容器mysql和jenkins
docker stop mysql jenkins
删除容器
docker rm [option]
bash
# 删除容器,也可删除多个
docker rm 容器名称
# 强制删除容器
docker rm -f 容器名称
docker rm -f newJenkins
docker rm -f docker1 docker2
参数解释:
--f:可以强制删除正在运行的指定容器。
--l:移除容器间的网络连接,而非容器本身。
--v:删除与容器关联的卷
docker rm -v 容器名称
查看docker日志
bash
docker logs -f 容器名称
docker logs -f newJenkins
参数:
-f: 持续输出
-since:显示某个开始时间的所有日志。
-t:显示时间戳。
-tail:仅列出最新N条容器日志。
查看容器属性-获取容器/镜像的元数据。
使用:故障注入测试需要查看相应容器属性
bash
docker inspect 容器名称
docker inspect newJenkins
参数说明:
-f:指定返回值的模板文件。
-s:显示总的文件大小。
-type:为指定类型返回JSON。
进入容器内命令:
使用:容器内查看配置文件,日志,运行状态等信息
bash
# 登录newJenkins容器内部
docker exec -it newJenkins bash
# 退出容器
exit
参数解释:
-d:在后台运行。
-i:即使没有附加也保持SDIN打开。
-t:分配一个伪终端。
其它
启动一个或多个已经停止的容器
docker start [option]
bash
# 启动已被停止的容器mysql
docker start mysql
重启容器命令
docker restart [option]
bash
docker restart mysql
暂停/恢复 一个或多个容器中的所有进程
docker pause [option]
docker unpause [option]
bash
# 暂停mysql容器中的所有进程
docker pause mysql
# 恢复一个或多个容器中的所有进程
docker unpause mysql
查看容器资源使用情况
显示容器资源的使用情况。包括:CPU、内存、网络I/O等
bash
docker stats [option]
# 静态列出正在运行的容器信息
docker stats --no-stream
--all,-a:显示所有的容器,包括未运行的。
--format:指定返回值的模板文件。
--no-stream:只展示下当前的状态,然后退出,不会实时更新。
--no-trunc:不截断输出,输出完整的信息
4. Docker 镜像管理
镜像管理介绍
当运行容器时,使用的镜像如果在本地中不存在,docker 会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载
如何寻找镜像?
需要搭建Jenkins, Jira镜像等镜像
官方镜像地址:http://hub.docker.com/
查看镜像
docker images [option]
bash
# 查看本地镜像
docker images
参数说明:
-a:列出本地所有的镜像。
-digests:显示镜像的摘要信息。
-f:显示满足条件的镜像。
-format:指定返回值的模板文件。
-no-trunc:显示完整的镜像信息。
-q:只显示镜像ID。
拉取镜像:也就是下载镜像
从镜像仓库中拉取或者更新指定镜像
REPOSITORY仓库地址 , TAG版本
bash
# 拉取镜像
docker pull 镜像名称
docker pull mysql
# 下载指定版本的镜像
docker pull mysql:5.5
options说明:
-a:拉取指定镜像的所有版本或标签。
-disable-content-trust:忽略镜像的校验,默认开启。
推送镜像
docker push [image_name]
删除镜像命令
bash
# 删除镜像
docker rmi [image_name]
# 删除指定版本镜像
docker rmi mysql:5.5
# 强制删除本地镜像mysql
docker rmi -f mysql
参数说明:
-f:强制删除
给镜像打 tag 命令 - 给镜像打标签
类似Git上打tag
bash
# 给镜像打tag
docker tag [images_name:tag]
docker tag mysql newmysql
# 查询镜像
docker images | grep mysql
# 实际使用
# 给mysql打一个v1.0标签
docker tag mysql mysql:v1.0
镜像打包和上传命令:
私有化-无法连接外网情况,考虑使用
无法连接外网,需要将容器打包为.tar文件
bash
# 将镜像打包为文件,上传实际使用的地方
# 将指定镜像保存成 tar 归档文件。
docker save busybox > busybox.tar
docker save mysql > mysql.tar
# 在使用环境中解压镜像
# docker save 命令导出的镜像。
docker load < busybox.tar.gz
docker load < mysql.tar
方式2
bash
# 将指定镜像保存成 tar 归档文件。
# 将镜像 mysql 生成 mysql.tar文档
docker save -o mysql.tar mysql
# 加载归档文件中的镜像
docker load -i mysql.tar
以下都是可以在生产环境直接使用的Docker命令
Docker 启动Jenkins
生产环境一行命令启动Jenkins:
bash
docker run --name myjenkins -d -p 5003:8080 -p 50000:50000 --restart always --privileged=true --user root --env JAVA_OPTS="-Xmx8192m" -v $(pwd)/jenkins_data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /bin/docker:/bin/docker jenkins/jenkins:lts
【注】生产环境,支持在 Jenkins 中调用宿主机的 Docker 命令,挂载对应文件即可。
参数解释:
--name :指定容器名称
-p:指定映射端口,可多个
--restart always : 挂了自动重启
--privileged=true :给docker开启特权模式,让容器内操作其他容器
--user root :使用root用户启动容器
--e JAVA_OPTS="-Xmx8192m" :指定环境变量
-v :文件挂载
具体解释:
| 参数 | 说明 |
|---|---|
--name myjenkins |
给容器指定一个名字为 myjenkins,方便后续管理(如 docker stop myjenkins)。 |
-d |
后台运行(detached mode),容器在后台运行,不占用当前终端。 |
-p 5003:8080 |
将宿主机的 5003 端口映射到容器的 8080 端口(Jenkins Web UI 默认端口)。 → 你可以通过 http://<host>:5003 访问 Jenkins。 |
-p 50000:50000 |
映射 50000 端口,这是 Jenkins 的 Agent 通信端口(用于 Jenkins master 与 slave/agent 节点通信)。 |
--restart always |
设置容器自动重启策略为 "总是重启",即使 Docker 服务重启或系统重启,该容器也会自动启动。 |
--privileged=true |
赋予容器 特权模式(privileged mode),拥有几乎等同于宿主机 root 的权限。 ⚠️ 安全风险高,通常仅用于需要深度访问硬件或内核功能的场景(此处主要是为了挂载 Docker 并执行构建)。 |
--user root |
指定容器内以 root 用户身份运行(默认 Jenkins 容器使用 jenkins 非 root 用户)。 → 这里是为了能写入挂载的卷、执行 Docker 命令等操作。 |
--env JAVA_OPTS="-Xmx8192m" |
设置环境变量 JAVA_OPTS,用于配置 JVM 参数。 → -Xmx8192m 表示最大堆内存设为 8GB,避免 Jenkins 因内存不足崩溃。 |
-v $(pwd)/jenkins_data:/var/jenkins_home |
将当前目录下的 jenkins_data 文件夹挂载到容器内的 /var/jenkins_home。 → 这是 Jenkins 的主目录,包含插件、配置、作业、用户数据等。 → 持久化数据,防止容器删除后数据丢失。 |
-v /var/run/docker.sock:/var/run/docker.sock |
将宿主机的 Docker daemon socket 挂载进容器。 → 允许容器内的进程(如 Jenkins)直接调用宿主机的 Docker 引擎(即 "Docker in Docker" 的替代方案,称为 "Docker outside of Docker")。 → 这样 Jenkins 可以构建、运行 Docker 镜像。 |
-v /bin/docker:/bin/docker |
将宿主机的 docker 客户端二进制文件挂载到容器中。 → 容器内就能使用 docker 命令(配合上面的 socket,即可操作宿主机 Docker)。 ⚠️ 注意:路径可能因系统而异(有些系统在 /usr/bin/docker)。 |
jenkins/jenkins:lts |
使用官方 Jenkins LTS(长期支持)版本镜像启动容器。 |
Docker搭建Web服务器的Nginx
【注】需要端口映射, 才能访问部署的容器
映射端口后:访问5003端口请求都会转发到80端口,达到间接通信
参数说明:
-v: 指定挂载文件
bash
# 最简模式
docker run -d -p 宿主机ip:容器ip --name=新的容器名称 原容器名称
docker run -d -p 5003:80 --name mynginx nginx
# 映射文件
docker run -d -p 5003:80 -v "$PWD/html":/usr/share/nginx/html --name mynginx nginx
Docker搭建mysql
参数说明:
-e: 用户给容器变量,相当于给容器传递参数
【注】容器在启动时,就会识别环境变量和在容器中配置
bash
docker run --name some-mysql -v /home/test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.5
Docker搭建Jira
bash
docker run -v "$PWD"/jira:/var/atlassian/application-data/jira --name="jira" -d -p 5003:8080 atlassian/jira-software
Docker 搭建 TestLink
两个容器连接
一个容器向另个容器发送请求如何请求?
--link : 连接两个容器
连接mariadb数据库
--link mariadb bitnami/testlink:latest
原理:--link就是将网络信息注入到testlink容器中,类似与环境变量(--link将连接的mariadb信息自动注入到testlink容器中)
bash
# 启动数据库
docker run -d --name mariadb -e ALLOW_EMPTY_PASSWORD=yes \
-e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink \
-v /home/gaofei/test/mysql:/var/lib/mysql \
-p 8088:3306 bitnami/mariadb:latest
# 启动testLink
docker run -d --name testlink -p 5003:8080 -p 444:443 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e TESTLINK_DATABASE_USER=bn_testlink \
-e TESTLINK_DATABASE_NAME=bitnami_testlink \
--link mariadb bitnami/testlink:latest
总结
✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

