Docker简单入门

news2024/11/29 6:38:50

docker简单入门

    • 🤚我的博客
    • 🥛前言
  • docker安装
    • 🔷常见命令
      • 镜像命令
      • 容器命令
      • 其他命令
  • docker部署mysql容器
  • docker数据卷
    • 🔷挂载数据卷
    • 🔷本地目录挂载
  • 创建一个自定义Docker镜像
    • 🔷镜像文件
    • 🔷构建镜像
  • 容器网络互连
    • 🔷容器网络
  • docker-compose
    • 命令
  • 实战
    • 🔷已经部署过的MySQL的修改
      • 加入到组网
      • 执行主机sql文件
    • 🔷配置一个nginx前端转发
    • 🔷配置后端服务
  • END
  • 🔷公众号

🤚我的博客

  • 欢迎光临我的博客:https://blog.csdn.net/qq_52434217?type=blog

🥛前言

最近学了docker,就顺便记录一下学习过程中的心得和bug。

docker安装

🔷常见命令

1、卸载

sudo yum remove docker 
			  docker-client 
			  docker-client-latest 
			  docker-common 
			  docker-latest 
			  docker-latest-logrotate 
			  docker-logrotate 
			  docker-selinux 
			  docker-engine-selinux 
			  docker-engine

2、安装工具

sudo yum install -y yum-utils

3、利用阿里云安装脚手架

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

4、启动和校验

# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启
systemctl restart docker
# 开机自启
systemctl enable docker

5、配置docker镜像加速

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' 
{ 
"registry-mirrors": ["https://XXXXXXXXXXX.mirror.aliyuncs.com"] 
} 
EOF 

6、重启服务

sudo systemctl daemon-reload 
sudo systemctl restart docker

镜像命令

1、拉取镜像

docker pull 镜像 名字

2、查看本地镜像

docker images
docker image ls

3、删除镜像

docker rmi image_name

4、加载本地镜像

docker load -i image_name.tar

5、保存镜像到本地

docker save

容器命令

1、创建并运行容器

# 后台运行
docker run -d --name container_name  -p 80:80 --network custom_net 

# 交互式运行
docker run -it 

2、查看docker容器运行状态

docker ps -a
docker ps --all
docker ps -p
dokcer ps --quiet

3、启动停止的容器

docker start container_name

4、停止运行的容器

docker stop container_name

5、删除容器

docker rm

6、进入容器内部执行

docker exec -it container_name bash
# 进入container_name中用bash终端执行

7、重命名容器

docker 

其他命令

1、查看容器日志

dokcer logs -f container_name

2、查看容器具体内容

docker inspect container_name

3、进入到正在运行的容器

docker exec -it container_name bash
docker exec -it container_name /bin/bash

4、拷贝主机文件到容器中

docker cp /path/to/file container_name:/path/tp/file

docker部署mysql容器

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

docker run :创建容器并运行
-d:容器后台运行
--name:给容器起名字,必须唯一
-p:端口映射,前面的端口是主机端口,后面的端口是容器端口
-e:环境变量,由镜像制作者决定
mysql:拉取和运行的镜像的名字,可以带上版本号mysql: 5.6

docker数据卷

数据卷是主机与容器之间的映射桥梁

nginx为例,我们需要指定nginxhtml目录下index.html文件

🔷挂载数据卷

挂载数据卷是指容器的文件指向主机,是一个文件映射关系

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

html:数据卷的名字

查看数据卷列表

docker volume ls

删除卷

docker volume volume_name

展示数据卷的详细信息

docker volume inspect volume_name

🔷本地目录挂载

本地目录与容器数据卷的区别是,数据卷为一个名字,而本地目录为路径,需要加上路径修饰符/

下面示例是挂载一些配置文件

docker run \
-d \
--name mysql\
-p 3306:3306 \ 
-v /root/mysql/data:/var/lib/mysql \
   /root/mysql/init:/docker-entrypoint-initdb.d \
   /root/mysql/conf:/etc/mysql/conf.d

创建一个自定义Docker镜像

镜像就是包含了应用程序、程序运行的系统函数库运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

  • 部署一个java应用的步骤:

    1、 准备一个Linux服务器

    2、安装JRE并配置环境变量

    3、拷贝jar包

    4、运行jar包

  • 镜像结构

    1、层(layer),用于添加安装包、依赖、配置等,每次操作都形成新的层

    2、基础镜像(BaseImage),应用以来的系统含数据、环境、配置、文件等

    3、入口(entrypoint),镜像运行入口,一般是程序启动的脚本和参数

🔷镜像文件

镜像文件中有一些常见的指令用于构造镜像环境,[Dockerfile镜像指令|https://docs.docker.com/reference/dockerfile/](Dockerfile reference | Docker Docs)

  • Dockerfile示例
# 基础镜像
FROM openjdk:11.0-jre-buster

#设定容器内部时区
ENV TZ=Asia/Shanghai

# 拷贝jar包
COPY docker-demo.jar /app.jar

# 入口
ENTRYPOINT ["java","-jar","/app/jar"]

🔷构建镜像

docker build -t image_name:1.0 .

-t:给镜像起名,格式为image_name:tag,不指定tag时默认为latest
.:指定Dockerfile的所在目录,表示在当前目录则为.

容器网络互连

🔷容器网络

容器网络可以帮助我们快速的建立容器之间的连接。在docker中容器的名字就可以作为容器中虚拟ip地址使用,大大简单了容器网络的连接方式。即使是在后面的compose中也是使用容器名字或者服务名字作为入口从而可以更简单的搭建多容器服务。

  • 创建网络
docker network create network_name
  • 查看网络
docker network ls
  • 连接网络
docker network connect network_name container_name

启动时连接

docker run -d \
--name container_name \
-p real_port:docker_port \
--network network_name image_name

docker-compose

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

一般来说一个compose对应一个项目

version: "3.8"

services:
	mysql:
		image:mysql
		container_name:mysql
		ports:
		- "3306:3306"
		enviroment:
			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:
			-hm-net
	hmall:
		build:
			context: .
			dockerfile:Dockerfile
		container_name:hmall
		ports:
			-"8080:8080"
		networks:
			-hm-net
		depends-on:
			-mysql
	nginx:
		image:nginx
		container_name:nginx
		ports:
			- "18080:18080"
			- "18081:18081"
		depends_on:
			- hmall
		networks:
			- hm-net
	networks:
		hm-net:
			name:hmall

depends_on是指在docker容器中存在的变量

nginx配置中的proxy_pass参数中hmall,就是由compose传入的,而depends_on变量传入的值便是容器中的虚拟ip地址。

server {
	listen 80;
	location /api {
		rewrite /api/(.*) /$1 break;
		proxy_pass http://hmall:8080;
	}
}

命令

实战

🔷已经部署过的MySQL的修改

加入到组网

  • 创建组网
  • 中断mysql原来的组网
  • 加入到新的组网
docker network create vinta_blog_net

docker network disconnet bridge

docker network connect vinta_blog_net

由于在创建容器时会加入一个默认组网,而这个组网的网关有可能是未知的。如果是未知的可能要删除容器并重新创建,而如果已知,比如我输入docker inspect mysql查看mysql容器信息会发现已经加入了一个网关为172.17.0.1的名为bridge的组网,这时可以中断连接。

输入命令查看网关配置

docker network inspect vinta_blog_net

可以发现vinta_blog_net组网中包含了一个名字为mysql的容器,其地址为172.18.0.2

执行主机sql文件

  • 复制主机文件到容器中
  • 执行复制到容器中的sql文件
docker cp /usr/project/Thririve_Api_master/thirive.sql mysql:thirive.sql

docker exec -it mysql bash

mysql -uroot -p

# input your password

# The database vinta is used in project
create database vinta

use vinta

source /thirive.sql

依次执行上面的代码即可完成sql数据库和数据表的建立

🔷配置一个nginx前端转发

  • 拉取一个新的镜像
  • 创建容器并指定数据卷映射

# 停止已经运行的nginx服务,注意是服务不是容器
# 如果没有,则不用执行
sudo systemctl stop nginx
# sudo nginx -s stop

docker pull nginx

docker run -d --name nginx -p 80:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/project/dist:/usr/share/nginx/html --network vinta_blog_net nginx

依次执行上面的代码即可完成配置

这里需要注意如果需要转发后端接口,只需要将ip地址填写为容器名字即可

如想将前端请求的/api转发到后端的5000端口,则只需要填写为http://backend-container-name:5000即可。

另外需要注意的是,由于nginx容器会生成一个默认的配置文件default.conf,这个配置文件在conf.d文件夹下,如果你想将本地数据卷挂载到自定义的文件夹下,需要注释掉nginx.conf中的default.conf文件的导入。

这里贴出nginx的配置

🔷配置后端服务

  • 打包项目文件并上传到服务器
  • 编写Dockerfile
  • 创建docker镜像
  • 创建docker容器并加入到组网运行

由于打包文件比较简单这里不再赘述

  • 编写Dockerfile

# 基本镜像环境
FROM python:3.10

# 创建工作目录
WORKON /vinta

# 把当前目录的所有文件复制到 /vinta下
COPY . /vinta

RUN pip3 install -r requirements.txt -i https://mirrors.bfsu.edu.cn/pypi/web/simple/

EXPOSE 5000

CMD ["python3", "app.py"]
  • 创建docker镜像
docker build -t vinta-blog-frontend .
  • 创建docker容器并加入到组网运行
docker run -d --name vinta_blog_frontend -p 5000:5000 --network vinta_blog_net vinta-blog-frontend

END

至此,就完成了docker简单入门。文中提到的资料可以私信我领取!

🔷公众号

欢迎关注小夜的公众号,一个什么都会一点的研究生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逻辑图框架图等结构图类图的高效制作方式不妨进来看看

**逻辑图框架图等结构图类图的高效制作方式不妨进来看看** 基于我们每天都在处理大量的数据和信息。为了更清晰地理解和传达这些信息&#xff0c;结构图、逻辑图和框架图等可视化工具变得越来越重要。然而&#xff0c;如何高效地制作这些图表并确保其准确性和易读性呢&#xf…

UCOS-III 任务同步机制-信号量

1. 信号量类型 1.1 二值信号量&#xff08;Binary Semaphores&#xff09; 二值信号量只有两个状态&#xff1a;可用&#xff08;1&#xff09;和不可用&#xff08;0&#xff09;。它主要用于任务之间的互斥访问或者事件通知。例如&#xff0c;当一个任务完成某个操作后&am…

浏览器打不开网页、但是电脑有网络,解决办法(win11)

2023.07.06测试有效 华为电脑拿去免费拆机保养后&#xff0c;发现浏览器连接不上网了&#xff0c;但是&#xff01;微信又能登录得上&#xff0c;也就是说电脑还是有网的。 原文链接 一、问题截图 二、解决方法 1.右键打开“网络和Internet设置” 2.打开“代理” 3.将该选项设…

匠心传承 筑梦大兴 大兴区餐饮行业职工职业技能竞赛完美收官

隆重举行&#xff0c;北京市商务局二级调研员林英杰&#xff0c;大兴区商务局党组书记、局长王丽娜&#xff0c;区总工会二级调研员侯月海&#xff0c;区商务局副局长、工会主席兰莉及各区县餐饮行业协会相关负责人、获奖单位、参赛职工等160余人参加大会。 此次竞赛通过前期调…

东莞惠州数据中心机房搬迁方案流程

进入21世纪以来&#xff0c;数据中心如雨后春笋般在各行各业兴建起来&#xff0c;经过近20年的投产运行&#xff0c;大量的数据中心机房存在容量不足、机房陈旧、设备老化无法支撑业务发展的情况&#xff0c;产生机房改造、搬迁需求。为安全、可靠地完成机房搬迁&#xff0c;减…

Unity中使用VectorGraphics插件时,VectorUtils.RenderSpriteToTexture2D方法返回结果错误的解决方法

Unity中使用VectorGraphics插件时&#xff0c;如果使用VectorUtils.BuildSprite方法创建Sprite&#xff0c;那么得到的Sprite往往是一个三角网格数比较多的Sprite&#xff0c;如果想要得到使用贴图只有两个三角面的方形Sprite&#xff0c;可以使用该插件提供的VectorUtils.Rend…

pandas读取CSV格式文件生成数据发生器iteration

背景 数据集标签为csv文件格式&#xff0c;有三个字段column_hander [‘id’, ‘boneage’, ‘male’]&#xff0c;需要自己定义数据集。文件较大&#xff0c;做一个数据发生器迭代更新数据集。 实现模板 在Pandas中&#xff0c;可以使用pandas.read_csv函数读取CSV文件&…

TTS文本转声音:fish-speech 推理、requests访问接口案例

参考: https://hub.docker.com/r/lengyue233/fish-speech https://speech.fish.audio/inference/#http-api 下载 下载模型: HF_ENDPOINT=https://hf-mirror.com huggingface-cli download fishaudio/fish-speech-1.2 --local-dir checkpoints/fish-speech-1.2下载的内容有…

HTML5使用<pre>标签:保留原始排版方式

在网页创作中&#xff0c;一般是通过各种标记对文字进行排版的。但是在实际应用中&#xff0c;往往需要一些特殊的排版效果&#xff0c;这样使用标记控制起来会比较麻烦。解决的方法就是保留文本格式的排版效果&#xff0c;如空格、制表符等。 如果要保留原始的文本排版效果&a…

How to use Solr as retriever in RAG

题意&#xff1a;怎样在 RAG 中使用 Solr 作为检索器 问题背景&#xff1a; I want to build a RAG (Retrieval Augmented Generation) service with LangChain and for the retriever I want to use Solr. There is already a python package eurelis-langchain-solr-vectors…

ABB机器人Socket 通讯相关指令

ABB机器人进行Socket 通讯时&#xff0c;首先需要安装PC Interface选项。以下对Socket 通讯时用到的相关指令做出介绍。 一、指令 1、socketdev Socketdev&#xff08;socket device&#xff09;&#xff0c;套接字设备是另一台网络计算机通讯链路的处理器。用于同其他网络计…

单链表在Python中的实现技巧

更多Python学习内容&#xff1a;ipengtao.com 链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据域和一个指向下一个节点的指针。链表的优点是插入和删除操作非常高效&#xff0c;特别是在需要频繁修改数据结构的情况下。本文将详细介绍…

【深度学习】-WASB-调试说明

要改这么几个地方&#xff1a; 代码仓库&#xff1a;/Desktop/code/python_project/WASB-SBDT-main/ 篮球数据集xx_xx_11.xml只保留最后一个11.xml 并把11下直接放置11 video&#xff1a; 这里的东西被我改了&#xff0c;要以仓库为准

openssh版本升级实战(修补ssh漏洞)基于RedHat8.4版本测试--已成功升级

升级前具有漏洞的的版本 通过命令查看目前系统的ssh和sshd版本&#xff1a; ssh -V sshd -V 注意&#xff1a;由于ssh是远程连接服务器的功能&#xff0c;在进行下面操作升级openssh前&#xff0c;请打开多个连接会话保持&#xff0c;如升级失败&#xff0c;可通过已连接的会话…

Transform Data with SQL

rm -r dp-203 -f git clone https://github.com/MicrosoftLearning/dp-203-azure-data-engineer dp-203 cd dp-203/Allfiles/labs/01 ./setup.ps1 -- This is auto-generated code SELECTTOP 100 * FROMOPENROWSET(BULK https://datalakexxxxxxx.dfs.core.windows.net/fil…

hive表小练习

-- 将对应的命令写在每个步骤中 -- 1.在hive中创建数据库school create database if not exists school; -- 2.在数据库school中创建如下的表 每张表的列分隔符都是, 存储格式是textfile 创建表名为student_info, 字段为stu_id 类型为string,注释为学生id 字段为stu_name 类…

【Python学习】流程控制、函数与类详解

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 Python作为一门强大而又简洁的编程语言&#xff0c;提供了丰富的工具和结构来帮助开发者编写清晰、高效的代码。在本文中…

解决Linux环境Qt报“cannot find -lgl“问题

今天&#xff0c;在Ubuntu 18.04.6环境下&#xff0c;安装Qt5.14.2之后&#xff0c;运行一个QWidget工程&#xff0c;发现Qt报"cannot find -lgl"错误。     出现这种现象的原因&#xff1a;Qt的Path路径没有配置&#xff0c;缺少libqt4-dev依赖包和一些必要的组件…

算法题-回文子串和最长回文子序列

算法题-回文子串和最长回文子序列 一、647. 回文子串二、516. 最长回文子序列 一、647. 回文子串 中等 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个…

基于SpringBoot的招聘信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等,欢迎咨询我!!)

文章目录 目录 文章目录 详细视频展示&#xff1a; 系统具体实现效果&#xff08;看看我的实力&#xff09; 技术栈&#xff08;详细的描述提供给同学思路参考&#xff09; 2.1 Java语言介绍 2.2 B/S架构 2.3 MySQL 数据库介绍 2.4 MySQL环境配置 2.5 SpringBoot框…