百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Docker_docker镜像库国内源

wptr33 2025-02-20 18:14 13 浏览

什么是docker

Docker 是一种开源的平台,帮助你轻松创建、部署和管理应用程序。它利用“容器”技术,使得应用程序能够在任何环境中运行,无论是开发者的个人电脑,还是生产环境中的服务器。

通俗解释:

假设你有一个应用程序,它需要特定的操作系统、特定的配置和一系列的依赖库。通常情况下,要在不同的电脑或服务器上运行这个应用程序,可能会遇到各种各样的兼容性问题,比如某个库的版本不对,操作系统设置不一样等等。Docker 通过将应用程序及其所有依赖打包到一个“容器”中,解决了这些问题。这个容器包含了应用程序运行所需的一切,就像一个迷你操作系统。这意味着无论在开发者的电脑上,还是在生产服务器上,只要有 Docker 环境,这个容器都能运行,而且表现一致。

Docker运行原理图

docker save -o xxx.tar 镜像名称 -- 保存镜像
docker load -i xxx.tar --加载镜像

1.安装

1.1 .虚拟机中安装docker

官网:https://docs.docker.com/engine/install/centos/

--1).安装 yum-utils 工具包。yum-utils 包含了一些用于管理 yum 仓库和软件包的实用工具

sudo yum install -y yum-utils

-- 2).通过 yum-config-manager 工具添加 Docker 的 yum 仓库地址,以便能够从该仓库安装 Docker 相关的软件包。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

-- 3).安装 Docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

提示: 最近国内docker的无发访问国外仓库. 解决办法是:配置国内的Docker仓库

# 删除已有的 Docker 仓库(如果有)
sudo rm -f /etc/yum.repos.d/docker-ce.repo
# 添加阿里云的 Docker 仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2 docker启动命令

systemctl start docker --启动docker
systemctl enable docker --设置开机启动docker
systemctl stop docker --停止docker

2.docker 软件安装

2.1 docker镜像网站

Docker官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。Docker官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。这个网站就成了Docker镜像交流的社区:

https://hub.docker.com/

2.2使用docker安装mysql

在镜像网站搜索mysql

docker run -d \
--name mysql \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysqldock

解读:

  • docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
  • --name`` mysql : 给容器起个名字叫mysql,你可以叫别的
  • -p 3306:3306 : 设置端口映射。容器是隔离环境,外界不可访问。但是可以将**宿主机端口映射容器内到端口**,当访问宿主机指定端口时,就是在访问容器内的端口了。容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
  • -``e`` TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像(如果本机有该镜像则不在去镜像网站下载)格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
  • 连接测试:

2.3 安装nginx

docker pull nginx --从镜像网站拉取 nginx
docker run -d --name nginx -p 80:80 nginx -- 安装docker

测试访问:

3.数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机**目录**之间映射的桥梁。

以nginx为例,如果想改变nginx.conf文件. 由于nginx.conf文件在nginx容器内部,我们无法改变,但是可以通过宿主机与容器进行映射,关系如下图:

3.1 具体操作如下


# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html
# 3.查看数据卷详情
docker volume inspect html
# 结果
[
{
"CreatedAt": "2024-05-17T19:57:08+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]
# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html
# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
# 6.打开页面,查看效果
# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash

4.网络

自定义网络

# 1.首先通过命令创建一个网络
docker network create mynetwork
# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID NAME DRIVER SCOPE
639bc44d0a87 bridge bridge local
403f16ec62a2 mynetwork bridge local
0dc0f72a0fbb host host local
cd8d3e8df47b none null local
# 其中,除了mynetwork以外,其它都是默认的网络
# 3.让test和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect mynetwork mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect mynetwork test
# 4.进入test容器,尝试利用别名访问mysql
# 4.1.进入容器
docker exec -it test bash
# 4.2.用mysql别名访问
ping mysql
# 结果
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping db
# 结果:
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.mynetwork (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms

5.自定义镜像

5.1 准备jar

5.2 准备dockerfile

dockerfile是以上jar需要的环境信息

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY test.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

5.3 上传到服务器

5.4 构建镜像

进入以上目录,执行命令

docker build -t test:1.0 .

注意,后面有个点 .

5.5 启动镜像

docker run -d --name test -p 9999:9999 test:1.0

5.6 访问

6.Compose

Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

案例,比如要同时部署 mysql nginx redis 和具体的项目.我们只需要配置docker-compose.yml

version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- mynet
month8:
build: 
context: .
dockerfile: Dockerfile
container_name: month8
ports:
- "8030:8030"
networks:
- mynet
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- month8
networks:
- mynet
- redis
redis:
image: redis
ports:
- "6379:6379"
volumes:
- ./config:/opt/config
- ./data:/data
command: redis-server /opt/config/redis.conf
networks:
- mynet
networks:
mynet:
name: month8

相关推荐

威信Chronosonic XVX全新旗舰全球首发 设计特点彻底公开

第一眼看到WilsonAudio新推出的ChronosonicXVX音箱,相信大家都会直觉认为它是两年前超级旗舰WAMMMasterChronosonic的缩小版,不过这个推测并不完全正确。C...

C#高精度Timer和Delay以及时间测量

在PCHMI7.0后在工具箱里会多一个MsTimer,以及Delay和Microsecond两个类。...

python教程从基础到精通,第9课—日期与时间

Hello,小伙伴们,祝大家五.一玩得快乐!刚学习完了七大数据类型,今天咱们来学习日期与时间的表示方法。Python标准库中提供了时间和日期的支持:calendar:日历相关;time、datetim...

软件测试|教你轻松玩转Python日期时间

Python基础之日期时间处理...

Go语言中互斥锁与读写锁,你知多少?

简述Golang中的锁机制主要包含互斥锁和读写锁互斥锁互斥锁是传统并发程序对共享资源进行控制访问的主要手段。在Go中主要使用sync.Mutex的结构体表示。一个简单的示例:funcmutex()...

变形金刚动画大电影——经典台词赏析

YOURDAYSARENUMBEREDNOW,DECEPTI-CREEPS你们活不了多久了,霸天虎小子。-{铁皮说的话,体现了铁皮的嫉恶如仇,可是后来铁皮在飞船上遇袭身亡,可谓是出师未捷身先...

Python时间日期模块使用教程(python3日期)

1.时间日期处理概述在日常编程中,时间日期处理是非常常见的需求,比如:记录日志时间...

亚马逊介绍AWS“无服务器”云服务改进:数据库可线上扩充容量等

IT之家11月29日消息,在今天于美国拉斯维加斯展开的亚马逊“AWSre:Invent2023”活动中,亚马逊计算部门资深副总裁PeterDeSantis,介绍了旗下三款云端服务,IT...

2.日期格式 datetime(日期时间显示格式)

fromdatetimeimportdatetime1.获取当前日期和时间now=datetime.now()#2025-05-3110:56:01.4687822.格式化日期...

【科普】时间单位大盘点(时间单位都有哪些?)

时间单位,是7种基本单位之一,长度、时间、质量、物质的量、光照度、电流和(热力学)温度是七种基本单位。本词条中时间单位以时间从大到小列。今天我们来盘点下时间的单位换算...

基于PHP的Laravel框架,盘点Github高星Web管理后台,效率为王!

在Web开发工作中,选择一个高效、稳定的后台管理系统是提高开发效率的关键。虽然PHP在近些年中的热度有所减退,但其上手简单、开源、灵活且被广泛应用的特点,仍然使其在编程语言排行榜中保持前十的位置。这表...

如何使用PHP编写一个简单的留言板?

留言板是一个常见的Web应用程序,允许用户在网站上发布和查看留言。在本文中,我们将使用PHP编写一个简单的留言板,介绍构建过程中的关键步骤和技巧。一、准备工作在开始编写留言板之前,我们需要准备好以下工...

产品经理提需求时要考虑的 15 个隐性需求

虽然世界充满未知的变化,但是有一些大的方向还是可以把握的,本文跟大家谈谈产品经理提需求时要考虑的15个隐性需求,enjoy~俗话说,计划赶不上变化快,无论需求文档做得如何细致,考虑得如何周全,总会...

关于 PHP 启动 MongoDb 找不到指定模块问题

前言:最近有一个小demo,需要通过PHP将用户行为记录储存到MongoDB,再用Spark做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用MongoDB却弄出了几个问...

PHP程序员老鸟面试经历(php程序员怎么样)

在任何时代找任何工作都有面试这么一说的。特别是高端技术类的工种对技术理论和技术实操能力要求很严格。大部分公司招收技术员工的要求也越来愈高。至于PHP程序员也是如此,我估计大多数PHP老鸟已经不在意所...