Docker使用

news2024/11/25 2:28:20

xshell和xftp软件下载

链接:https://pan.baidu.com/s/1G7DIw14UvOmTwU9SwtYILg 
提取码:he18 
--来自百度网盘超级会员V6的分享

docker相关资料:

链接:https://pan.baidu.com/s/1VcxvuJvBIKNKnUUHPlM3MA 
提取码:6w5e 
--来自百度网盘超级会员V6的分享

https://download.csdn.net/download/pxyp123/87216802

一、镜像

1.去镜像仓库搜索需要的镜像

2.拉取镜像,比如nginx(默认是最新版本)

docker pull nginx

也可以指定版本

docker pull nginx:1.22.1

3.查看镜像

docker images

 4.保存、导入镜像

利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

1)使用docker save导出镜像到磁盘。运行命令:

docker save -o nginx.tar nginx:latest

2)先删除本地的nginx镜像

docker rmi nginx:latest

3)然后运行命令,加载本地文件:

docker load -i nginx.tar

二、容器

容器保护三个状态:

  • 运行:进程正常运行

  • 暂停:进程暂停,CPU不再运行,并不释放内存

  • 停止:进程终止,回收进程占用的内存、CPU等资源

其中:

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

1.创建并运行nginx容器的命令:

docker run --name mn -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器

  • --name : 给容器起一个名字,比如叫做mn

  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口

  • -d:后台运行容器

  • nginx:镜像名称,例如nginx

2.进入Nginx容器,修改HTML文件内容,添加“欢迎您”

1)进入刚刚创建的容器:

docker exec -it mn bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • mn :要进入的容器的名称

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

 2)进入nginx的HTML所在目录 /usr/share/nginx/html。

查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html

cd /usr/share/nginx/html

 3)修改内容

容器内没有vi命令,无法直接修改,我们用下面的命令来修改:

sed -i -e 's#Welcome to nginx#欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

在浏览器访问自己的虚拟机地址,例如:http://192.168.150.101,即可看到结果。

4)其他

查看容器日志的命令:

  • docker logs
  • docker logs -f

    添加 -f 参数可以持续查看日志

查看容器状态: 

  • docker ps
  • docker ps -a

    docker ps -a 查看所有容器,包括已经停止的

5)删除容器

docker rm nginx

加上-f可以强制删除

docker rm -f nginx

 

三、数据卷

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

数据卷操作的基本语法如下:

docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume

  • inspect 显示一个或多个volume的信息

  • ls 列出所有的volume

  • prune 删除未使用的volume

  • rm 删除一个或多个指定的volume

1.创建和查看数据卷

docker volume create html
docker volume ls

查看数据卷的详细信息

docker volume inspect html

可以看到,创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data目录。

2.挂载数据卷格式(不要运行)

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

“\”表示换行。-v就是挂载数据卷的命令:

  • -v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

3.给nginx挂载数据卷

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容。

1)根据前面,已经知道nginx的html目录所在位置/usr/share/nginx/html

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

2)进入html数据卷所在位置

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data

 3)修改

方法一:vim

# 修改文件
vim index.html

方法二:使用vscode

xshell配合打开Xftp软件,

工具,选项,高级,选择一个编辑器(比如vscode)

 右键选择vscode打开

 修改内容如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!欢迎您!!!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

访问nginx的结果为: 

修改完毕,删除容器!

 然后删除数据卷!

 4.给MySQL挂载本地目录

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录

  • 直接挂载模式:宿主机目录 ---> 容器内目录

创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

实现思路如下:

1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像

2)创建目录/tmp/mysql/data

3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf

4)去DockerHub查阅资料,创建并运行MySQL容器,要求:

① 挂载/tmp/mysql/data到mysql容器内数据存储目录

② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

③ 设置MySQL密码

 1)通过Xftp传输mysql.tar到/tmp目录下

2)命令行转到tmp目录下, 

cd /tmp/

 3)load安装包

docker load -i mysql.tar

4)创建文件

mkdir -p mysql/data

mkdir -p mysql/conf

5)通过Xftp添加配置文件hmy.cnf到conf目录下

cd mysql/conf

6)挂载

此处设置密码为:password

docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=password \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25

 7)通过sqlyog或者其他软件连接,密码为自己设置的密码,本文为:password

8)删除数据卷和容器(镜像不用删除哦!),然后退出即可。

四、自定义docker镜像

1.基于Ubuntu镜像构建一个新镜像,运行一个java项目

步骤1:tmp目录下新建一个空文件夹docker-demo

cd /tmp
mkdir docker-demo

 

步骤2:使用xftp拷贝docker-demo.jar,jdk8.tar.gz,Dockerfile文件到docker-demo这个目录

Dockerfile文件内容: 

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

步骤3构建镜像命令(一定要注意1.0后有个空格,再加一个点):

docker build -t javaweb:1.0 .

成功后查看镜像:

docker images

步骤4运行镜像命令:

docker run --name web -p 8090:8090 -d javaweb:1.0

最后访问 http://192.168.150.101:8090/hello/count,其中的ip改成你的虚拟机ip

 

 2.基于java:8-alpine镜像,将一个Java项目构建为镜像

步骤1:vscode修改Dockerfile文件内容,然后xftp覆盖掉原来的文件

Dockerfile文件修改如下:

# 指定基础镜像
FROM java:8-alpine

# 拷贝jdk和java项目的包
COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

 

步骤2:运行镜像

docker build -t javaweb:2.0 .

 

 

 

 

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

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

相关文章

一些常见的项目管理 KPI

本文将介绍一些常见的项目管理kpi&#xff0c;让大家更深刻的了解其作用及所存在的问题。 一、关键绩效指标的作用 在 GPS 和其他现代导航方法出现之前&#xff0c;水手和探险家们只能通过星星找到正确的方向。特别是在北半球&#xff0c;他们利用北极星找出真正的北方方位。…

[附源码]SSM计算机毕业设计医学季节性疾病筛查系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Mysql高频面试题(一)

文章目录1. Mysql如何实现的索引机制&#xff1f;2. InnoDB索引与MyISAM索引实现的区别是什么&#xff1f;3. 一个表中如果没有创建索引&#xff0c;那么还会创建B树吗&#xff1f;4. B树索引实现原理&#xff08;数据结构&#xff09;5. 聚簇索引与非聚簇索引的B树实现有什么区…

Vector源码分析

Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的: Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的…

pytest + yaml 框架 - 1.我们发布上线了!

前言 基于 httprunner 框架的用例结构&#xff0c;我自己开发了一个pytest yaml 的框架&#xff0c;那么是不是重复造轮子呢&#xff1f; 不可否认 httprunner 框架设计非常优秀&#xff0c;但是也有缺点&#xff0c;httprunner3.x的版本虽然也是基于pytest框架设计&#xff…

Spring中JDK与Cglib动态代理的区别

靠Spring吃饭的小伙伴一定经常听说动态代理这个词&#xff0c;没错&#xff0c;Aop就是靠它来实现的。Spring提供了两种代理模式&#xff1a;JDK动态代理、Cglib动态代理&#xff0c;供我们选择&#xff0c;那他们有啥区别呢&#xff1f;Sping为啥不自己从中挑选一个作为代理模…

IB物理的费曼图怎么考?

费曼图是用来描述基本粒子间相互作用的图形化表示&#xff0c;由诺贝尔物理学奖得主、著名物理学家理查德费曼&#xff08;Richard Feynman&#xff09;提出&#xff0c;十分清晰直观。虽然真正的费曼图可以用来做更深奥的数学计算&#xff0c;但是在IB物理中&#xff0c;考纲要…

那些惊艳一时的 CSS 属性

1.position: sticky 不知道大家平时业务开发中有没有碰到像上图一样的吸顶的需求&#xff1a;标题在滚动的时候&#xff0c;会一直贴着最顶上。 这种场景实际上很多&#xff1a;比如表格的标题栏、网站的导航栏、手机通讯录的人名首字母标题等等。如果让大家自己动手做的话&…

flink学习

Flink学习之路&#xff08;一&#xff09;Flink简介 - 走看看 Flink(一)-基本概念 - 知乎 Flink架构&#xff1a; Flink整个系统包含三个部分&#xff1a; 1、Client&#xff1a; 给用户提供向Flink系统提交用户任务&#xff08;流式作业&#xff09;的能力。用户提交一个F…

大型商场借力泛微,实现内外协同招商,合同、铺位、费用统一管理

对即将开业或是面临调整改造的购物中心来说&#xff0c;用什么样的方式才能快速地达成招商目的&#xff0c;实现资产价值的保值和增值&#xff0c;成为商业操盘手们共同面临的难题…… 行业需求 • 建立充足的品牌资源储备&#xff0c;拓宽招商渠道和线索&#xff0c;提高成交…

ElasticSearch-全文检索和分析引擎学习Day01

前言 学习谷粒商城基础片完结后便开启了高级部分的学习&#xff0c;高级部分的第一章节 Elasticsearch 搜索和分析引擎。文档地址&#xff1a;elasticsearch中文文档地址 一、Elasticsearch 简介 1.1 Elasticsearch 是什么&#xff1f; Elasticsearch 是一个分布式的免费开…

入门力扣自学笔记208 C++ (题目编号:895)

895. 最大频率栈​​​​​​ 题目&#xff1a; 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除…

Leetcode 85.最大矩形(困难)

一、题目 1、题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0&qu…

基于微信小程序奶茶店在线点单管理系统ssm框架-计算机毕业设计

面对目前奶茶店林立的现状&#xff0c;大城市奶茶店多为连锁奶茶店他们都有统一的管理和相应的系统。但是个别小县城和小城以及城区也有不少的奶茶店多为自营&#xff0c;这就必须店长自己管理和采购原料。大型连锁的奶茶店管理系统就不适用于分散的小型奶茶店。小型奶茶店的管…

剑指 Offer 10- II. 青蛙跳台阶问题

一、题目描述 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 二、示例 示…

TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性

文章信息 题目&#xff1a;Sugar transporter TaSTP3 activation by TaWRKY19/61/82 enhances stripe rust susceptibility in wheat 刊名&#xff1a;New Phytologist 作者&#xff1a;Baoyu Huai&#xff0c;Zhensheng Kang,Jie Liu et al. 单位&#xff1a;Northwest A&…

【C++】string使用模拟实现

文章目录前言为什么学习string类&#xff1f;1. string函数常用接口介绍1.1 string容器基本概念1.2 string构造函数1.3 string访问和修改1.4 string插入和删除1.5 string赋值操作1.5 string字符串拼接1.7 string查找和替换1.8 string子串1.9 string类对象的容量操作2. string类…

dockerfile编写

dockerfile编写 dcoker 的一个操作和交互的关系流程: dockerfile 编写规则 习惯使用大写非注释行第一行必须是FROM文件名必须是dockerfile指定一个专门的工作目录所有引入的映射文件必须在这个工作空间目录下工作空间不支持隐藏文件(.dockeringore)作用是用于存放不需要打包…

2022最新iOS最新打包发布流程

关于如何发布iOS应用到App Stroe&#xff0c;苹果开发者中心已经给出了很详细的说明。和普通的iOS应用一样&#xff0c;使用React Native开发的iOS应用也需要使用普通的iOS应用的发布流程&#xff0c;总的来说&#xff0c;主要涉及以下几步&#xff1a; 加入苹果开发者计划&am…

【Android进阶之旅】内存泄漏的危害有哪些?(案例分析)

随着计算机应用需求的日益增加&#xff0c;应用程序的设计与开发也相应的日趋复杂&#xff1b; 开发人员在程序实现的过程中处理的变量也大量增加&#xff0c;如何有效进行内存分配和释放&#xff0c;防止内存泄漏的问题变得越来越突出 例如&#xff1a; 服务器应用软件&#x…