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

Docker_docker镜像库国内源

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

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

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...