Docker容器 - 了解Docker基础命令(容器+镜像命令)

文章目录

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

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

两个容器连接

一个容器向另个容器发送请求如何请求?

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

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
来鼓AI4 小时前
2026新品牌冷启动:3大获客工具实测,来鼓AI助ROI提升56%
经验分享
pzx_0015 小时前
【SSH连接错误】WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
运维·网络·ssh
skywalk81635 小时前
阿里云FreeBSD系统升级cbsd:cbsd: 14.3.2 -> 15.0.0 [FreeBSD]
运维·服务器·freebsd
yangminlei5 小时前
IK分词器
运维·jenkins
半路_出家ren5 小时前
23.Python处理SSH和Redis
运维·网络·redis·python·网络安全·ssh·paramiko
步菲5 小时前
Windows系统安装Docker Desktop配置daemon.json不生效问题解决
windows·docker·容器
空空kkk5 小时前
Java项目从单体到微服务的演变
java·运维·微服务
我想发发发6 小时前
.deb格式软件包安装方式(Ubuntu 22.04为例)
linux·运维·ubuntu
cyber_两只龙宝6 小时前
LVS-NAT模式实验配置以及详解
linux·运维·云原生·lvs