首页 > 其他分享 >Docker快速入门到项目实战部署

Docker快速入门到项目实战部署

时间:2024-11-14 15:47:16浏览次数:1  
标签:实战 容器 compose 入门 nginx mysql 镜像 docker Docker

1. *docker*

1.1 *什么是docker*

docker是快速构建、运行、管理应用的工具,简单来就是来帮助部署项目以及部署项目需要的一些组件的工具。

1.2 *卸载旧版*

首先如果系统中已经存在旧的docker,则先卸载:
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
docker-selinux

1.3 *配置docker yum源库*

1.3.1 *安装yum 源工具*

执行yum install -y yum-utils命令,报以下错误。

原因:是因为centos7在024年6月份停止维护,导致默认镜像不能使用,更改镜像即可,详见以下网址更改镜像。

网址:https://developer.aliyun.com/mirror/centos?

再执行:yum install -y yum-utils

1.3.2 *配置docker yum源*

yum源工具安装成功后,执行此命令:

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

uploading-image-16926.png

更新yum源,建立缓存

sudo yum makecache fast

1.3.3 *安装docker*

安装docker引擎、docker引擎的命令行程序、docker运行时的容器环境、docker构建镜像的工具、docker做批量操作的工具。

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

安装完成后可以使用docker -v命令查看版本号

1.3.4 *启动和校验*

启动docker

systemctl start docker

停止docker

systemctl stop docker

重启

systemctl restart docker

设置开机自启

systemctl enable docker

执行docker ps命令,如果不报错,说明安装启动成功

docker ps

2. *配置镜像加速*

2.1 *注册阿里云账号*

首先访问阿里云网站:https://www.aliyun.com/,注册一个账号。

2.2 *开通镜像服务*

在首页的产品中,找到阿里云的容器镜像服务:

点击后进入控制台:

首次可能需要选择立刻开通,然后进入控制台。

2.3 *配置镜像加速*

找到镜像工具下的镜像加速器:


页面向下滚动,即可找到配置的文档说明:

具体命令如下:

创建目录

mkdir -p /etc/docker

复制内容,注意把其中的镜像加速地址改成你自己的,执行此命令可自动配daemon.json文件,执行此命令

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://4iydscvo.mirror.aliyuncs.com",
"https://docker.anyhub.us.kg",
"https://docker.ckyl.me"
]
}EOF

此外也可手动配置

# 重新加载配置

systemctl daemon-reload

# 重启docker

systemctl restart docker

此外找了一些加速器地址

{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn"
]
}

3. *docker命令快速部署mysql*

使用docker命令快速部署mysql:

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


通过任意客户端连接mysql

镜像只需要下载一次,可多次使用
docker run -d
--name mysql2
-p 3307:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
mysql

命令解读:

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

4. *镜像和容器*

当我们利用docker安装应用时,docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。docker会在运行镜像时创建一个隔离环境,称为容器(container)。

镜像仓库:存储和管理镜像的平台,docker官方维护了一个公共仓库:docker Hub。

访问地址:hub.docker.com

镜像仓库已经下载好的安装包,需要敲一个命令,由docker server来运行,客户端输入命令之后,docker的守护进程会进行监听,运行的那个就去镜像仓库进行查找,然后再拉取到本地,运行docker时会自动创建一个隔离环境,叫容器,一次拉去镜像可以多次使用,可以同时部署多个,互不影响

5. *docker命令*

docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/

5.1 *docker常见的命令*

命令 说明
dockers pull 拉取镜像
docker push 推送镜像到dockerRegistry
docker images 查看本地镜像
docker rmi 删除本地镜像
docker run 创建并运行容器(不能重复创建)
docker stop 停止指定容器
docker start 启动指定容器
docker restart 重新启动指定容器
docker rm 删除指定容器
docker rm -f $(docker ps -aq) 强制删除正在运行的所有容器
docker ps 查看容器
docker logs 查看容器运行日志
docker logs -f --tail 100 容器id 查看容器运行最后的100条日志
docker exec 进入容器
docker save 保存镜像到本地压缩文件
docker load 加载本地压缩文件到镜像
docker inspect 查看容器详细信息
docker search 查找镜像
docker status 容器id 查看容器的状态(cpu、内存、网络I/o)

下图来表示这些命令的关系:

5.2 *案例演示相关命令*

5.2.1 *拉取镜像*

如何拉取一个镜像,以nginx为例

查看dockerHub,拉取Nginx镜像,创建并运行Nginx容器,docker pull nginx

查看本地镜像是否拉取成功,命令docker images

5.2.2 *保存镜像*

如何将这个镜像保存为一个tar包,docker save -o nginx.tar mynginx:v1.0

5.2.3 *加载镜像*

如何加载一个镜像:docker load -i nginx.tar

5.2.4 *运行容器*

运行nginx容器,docker run -d --name nginx -p 80:80 nginx

5.2.5 *停止容器*

停止nginx容器,docker stop nginx

5.2.6 *查看容器*

查看所有的容器(包括停止的容器)

docker ps -a

5.2.7 *启动容器*

启动nginx: docker start nginx

5.2.8 *查看容器日志*

查看日志: docker logs -f --tail 100 nginx

5.2.9 *进入容器内部*

进入容器的内部:docker exec -it nginx bash

退出并进入mysql容器内部,docker exec -it mysql bash

5.2.10 *docker 命名别名*

docker命令别名:找到~/.bashrc文件

vim ~/.bashrc

让配置生效:source ~/.bashrc

查看容器id、镜像名称、端口号、状态、镜像名称

5.2.11 *删除镜像*

删除镜像:

docker rmi nginx:latest

6. *数据卷*

容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。以下是一个利用Nginx容器部署静态资源的案例。

需求:创建Nginx容器,修改nginx容器内的html目录下的index.html文件,查看变化,将静态资源部署到nginx的html目录。

在此地址下找到nginx的静态资源目录https://hub.docker.com/

使用命令:docker exec -it nginx bash进入到nginx的容器内部,进入到容器内部目录/usr/share/nginx/html/,修改index.html文件

显然vi命令无法进入index.html文件内部进行修改,因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦,

此时就需要通过另一种方式来进行修改。

6.1 *什么是数据卷*

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

以修改nginx中的html和conf的配置为例,首先需要使用docker来创建html和conf两个数据卷,两个数据卷的真实目录就在我们所使用的宿主机上,数据卷与宿主机的目录进行一一对应,让容器内的目录与数据卷进行挂载,产生关联,通过数据卷可以使容器内的目录和宿主机的目录进行双向邦定。

6.2 *数据卷的相关命令*

命令 说明
docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷的详情
docker volume prune 清除数据卷

6.3 *如何创建和使用数据卷*

1、在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载。

2、当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷。

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

使用docker volume ls 查看数据卷

使用docker volume inspect html 查看数据卷挂载在宿主机的那个目录下

进入宿主机/var/lib/docker/volumes/html/_data目录下,修改index.html并在此目录下添加一张图片

再次进入nginx容器内部,docker exec -it nginx bash,进入到ngnix的 /usr/share/nginx/html/目录下,该目录下的文件和宿主机的目录下文件一一对应。

结论:只要宿主机下的数据卷进行修改后,对应的容器内部文件也会一一对应被修改。

7. *DockerCompose*

在部署一个简单的项目,其中包含的容器也很少,手动安装逐一安装部署还不是很麻烦,例如我们的图平台有大量的基础组件以及各种微服务组件,在没有自动安装部署的脚本下,手动一一安装部署,显得非常的麻烦。而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

7.1 *安装 docker compose*

curl -L https://github.com/docker/compose/releases/download/v2.24.6/

docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

7.2 *基本语法*

docker-compose.yml文件的基本语法可以参考官方文档。

https://docs.docker.com/reference/compose-file/legacy-versions/

docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。

举例来说,用docker run部署MySQL的命令如下:
docker run -d
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v ./mysql/data:/var/lib/mysql
-v ./mysql/conf:/etc/mysql/conf.d
-v ./mysql/init:/docker-entrypoint-initdb.d
--network blogo
mysql

如果用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"
networks:
- new-net
networks:
new-net:
name: blogo

对比如下:

docker run 参数 docker compose 指令 说明
--name container_name 容器名称
-p ports 端口映射
-e environment 环境变量
-v volumes 数据卷配置
--network networks 网络

7.3 *基础命令*

常见命令详见官方文档:https://docs.docker.com/reference/

基本语法命令:docker-compose [OPTIONS] [COMMAND] -d

其中,OPTIONS和COMMAND都是可选参数,-d 参数是后台启动,比较常见的有:

类型 参数或指令 说明
Options -f 指定compose文件的路径和名称
-p 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commands up 创建并启动所有service容器
down 停止并移除所有容器、网络
ps 列出所有启动的容器
logs 查看指定容器的日志
stop 停止容器
start 启动容器
restart 重启容器
top 查看运行的进程
exec 在指定的运行中容器中执行命令

7.4 *docker compose 安装mysql*

version: '3.8'
services:
mysql:
container_name: mysql
image: mysql:latest
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123
volumes:
- mysql-data:/var/lib/mysql
restart: always
volumes:
mysql-data:

上线命令:docker-compose -f compose.yaml up -d

下线命令:docker-compose -f compose.yaml down

标签:实战,容器,compose,入门,nginx,mysql,镜像,docker,Docker
From: https://www.cnblogs.com/ccl971123/p/18546187

相关文章

  • 黑客技术渗透测试零基础入门教程—一文讲清什么是内网渗透!
    前言这是晓晓给粉丝盆友们整理的网络安全渗透测试入门阶段内网渗透与防御教程喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。一.什么是内网渗透内网渗透是指攻击者已经进入了目标系统的内部网络,通过侧信道攻击、横向渗透等方式进一步控制系统,获取敏感信息......
  • Pytorch实战
      在学习某个深度学习框架时,掌握其基本知识和接口固然重要,但如何合理组织代码,使得代码具有良好的可读性和可扩展性也必不可少。本文不会深入讲解过多知识性的东西,更多的则是传授一些经验,这些内容可能有些争议,因其受我个人喜好和coding风格影响较大,**你可以将这部分当成是一种参......
  • 某大型商超客户采购数据分析(Spark实战)
    写了一些使用sparksql以及spark机器学习来进行数据分析的东西,希望能给大家做一些参考项目需求:对某大型商超客户采购数据集进行数据分析数据来源:https://www.heywhale.com/mw/dataset/656069b19a74cc18269207c4/content首先使用Spark读入数据集,读入文件前要先将文件转为csv格......
  • docker run指定gpu,后台拉镜像
     root@node37:/ollama#dockerrun-d--gpus'"device=2,3"'-v/ollama:/root/.ollama-p11434:11434--nameollamaollama/ollamac12c23004c3957a8cba38376dbb17904db9381932f9578b2dd5de87794f40a9droot@node37:/ollama#root@node37:/ollama#......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业
      很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全......
  • .NET 8 强大功能 IHostedService 与 BackgroundService 实战
    前言在.NET8中,IHostedService和BackgroundService两个核心接口的引入,增强了项目开发中处理定时任务的能力。这两个接口不仅简化了定时任务、后台处理作业以及定期维护任务的实现过程,还提升了在ASP.NETCore或任何基于.NET的宿主应用程序中的集成与管理效率。IHostedService......
  • 知乎3.4万赞,大模型入门书籍精选!2025年程序员必备!
    在知乎上,"如何系统的入门大模型?"这一话题引爆了超过50万读者的热烈讨论。作为程序员,我们应当是最先了解大模型的人,也是率先成为了解大模型应用开发的人,到底如何入门大模型的应用开发?前排提示,文末有大模型AGI-CSDN独家资料包哦!我精心整理了一份2024年畅销的大模型书单。......
  • navicat连接远程服务器docker的mysql容器时连不上报错
    报错:1130-HostxxxisnotallowedtoconnecttothisMySQLserver1.原因是root账户没有远程访问权限,先进mysql容器dockerexec-it你的容器id/bin/bash2.连接数据库,输入你的密码mysql-uroot-p3.切换到mysql数据库usemysql;4.更新用户表:(其中%的意思是允许所有的......
  • linux下安装docker
    ****************docker****************docker是一个快速构建、运行、管理应用的工具。****************镜像和容器****************当我们利用docker安装应用时,docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。do......
  • Hydra的完整安装和使用指南(非常详细),零基础入门到精通,看这一篇就够了
    前言安装Hydra1.安装必要的依赖库在终端中执行以下命令,安装Hydra所需的依赖库:sudoapt-getinstallbuild-essentialcheckinstalllibssl-devlibssh-devlibidn11-devlibpcre3-devlibgtk2.0-devlibmysqlclient-devlibpq-devlibsvn-devfirebird-devlibmemcached......