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

Docker_docker镜像库国内源

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

什么是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

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...