docker导入镜像 liunx_docker扫盲?面试连这都不会就等着挂吧

8c96ba55d2bff16ff0e1f7998c0201e0.png

推荐阅读:

java喵:6大面试技能树:JAVA基础+JVM+算法+数据库+计算机网络+操作系统​zhuanlan.zhihu.com
3762746d617a022be0eb67366ce6eab1.png
一只Tom猫:都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”!​zhuanlan.zhihu.com
27b663e7157efe45a4e0512f4d639328.png
现在很多公司项目部署都是采用K8S docker容器方式,出门面试被问的概率极大,如果被面试官问docker相关知识点直接懵逼,那么基本就是被pass了,除非其他方面技术过硬。所以这种相对前沿的技术,就算达不到精通的程度,起码还是要了解基础理论和操作

一.安装docker

Docker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上

  • uname -an 查看当前系统版本
  • yum -y install docker 下载安装docker
  • service docker start 启动docker服务
  • docker version 检查docker是否安装成功

当看到下图的信息,就是表示本机docker已经安装成功,很简单

55d81e72a2caf4b75c092c3c5a264342.png

二.镜像操作

创建容器要以镜像为基础,所以先讲下docker镜像的操作

搜索镜像

docker images ll 查看下本机的是否已经有了镜像

目前机器里还没有镜像,去Docker Hub下载(镜像还可自定义,这里就不细说了)

docker search java ,还能指定具体的版本进行下载,

例如:docker search Ubuntu:1.2.5.4,可以进行搜docker Hub 会列出很多镜像

5bf1c45a3dbcd399f2387f11b9bf25e2.png

下载镜像

docker pull http://docker.io/nginx 进行下载

下载到本地的镜像要比docker Hub上搜索出来的要大,因为下载过程中自动解压了,在查看镜像列表就有了刚才下载的镜像

列表包含了仓库名,版本标签,镜像ID,创建时间以及所占用的空间

95f940274a24d631a21a70c9a58dd15d.png

删除镜像

删除没用的镜像docker rmi 镜像id

34b9ee2b0940f2eec8f2862cb7ab7a8a.png

三.容器的操作

前边我们已经下载好了Nginx的镜像,接下来我们就创建一个只有Nginx应用的容器

docker run -i -t <IMAGE_ID> /bin/bash

-i:标准输入给容器 -t:分配一个虚拟终端 /bin/bash:执行bash脚本

docker run -idt --name container_nginx -p 8080:80  docker.io/nginx复制代码

启动一个使用镜像http://docker.io/nginx,名字container_nginx的容器,-p 8080:80表示将容器的80端口映射到主机的8080端口,这样我们只要访问主机的8080端口就可以访问到容器的服务了。

注意:name前面是两个-, 端口前面有-p, http://docker.io/nginx是镜像名,8080是主机的端口,80是Nginx应用的端口

主机上的一个端口只能映射一个容器端口,不可以多个容器端口对应一个主机端口(如果容器安装的centos类的系统,那么容器端口随便设定,但如果容器内只是单纯的应用,那么容器端口要是应用自身的端口)

e6c80f69e72704458b3ac5c31441abe9.png

这样我们就创建并启动了一个容器!

exit 退出容器
docker ps 查看运行中的容器
docker ps -a 查看运行中和非运行中的所有容器
docker exec -it container_nginx /bin/bash 进入容器
如果容器还未启动 执行docker start container_nginx

进入容器后启动Nginx

whereis nginx 找Nginx的启动目录

[root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginxcontainer_nginx[root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bashroot@84683e425116:/# whereis  nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@84683e425116:/#  /usr/sbin/nginx 复制代码

此时在浏览器访问 http://51.110.218.9:8080/ 就可以直接访问容器内的Nginx

aa691be1030dd90bcb116bb2451c9584.png

如果访问不成功,可能是主机端口的防火墙开着,执行下边的命令关闭

/ sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT复制代码

由于我用的阿里云服务器,所以需要在阿里云把8080端口开放

34e0708d055ed84a76eac59618228c1e.png

删除容器

容器删除之前先将容器停止

docker stop container_nginx 或者是容器的id

docker rm -f container_nginx 容器删除

docker start 与 docker run 的区别

docker start name 启动一个已经创建的容器

docker run 创建并启动一个容器

docker run 命令其实是 docker create 和 docker start 的命令组合,先执行docker create 创建一个容器 再接着docker start启动

主机和容器文件相互复制

从主机复制到容器 sudo docker cp host_path containerID:container_path从容器复制到主机 sudo docker cp containerID:container_path host_path复制代码

请注意,以上这两个命令都是在主机中执行的,不能再容器中执行

docker cp container_nginx:/usr/local/xin.txt  /usr/local/software/   容器向主机复制文件docker cp /usr/local/xinzhifu.txt  container_nginx:/usr/local/  主机向容器复制文件复制代码

这样一个基础的docker容器就创建完了 。。。。。。。。。。。。

反过来大家再看一看docker的容器与镜像的区别 http://www.cnblogs.com/linjiaxin/p…

那么其实镜像与容器的本质区别并不大,那么镜像可以生成容器 ,容器是否可以做成镜像呢?

docket commit container_nginx  image_nginx:v1复制代码

41357c579bbcc2ea596bf337f5cd434e.png

container_nginx 容器名

image_nginx:v1 自己起一个镜像的名字:版本号


这样做有什么好处呢?

例如:A、B两台机器都想安装redis,A机器上创建容器并在容器中做好redis的一切配置,让后将这个容器docker commit 成镜像image_redis,B机器也想要安装redis,直接用镜像image_redis创建容器就行了,docker就是做这样一劳永逸的事情。

而且传统方式得在每台机器上安装配置redis非常麻烦

四.镜像的导入与导出

镜像压缩打包 (主机上进行操作),有两种方式 docker save 与 docker load 和 docker export 与 docker import

docker save nginx | gzip > nginx_xin_image.tar.gz  将现有的镜像压缩打包docker load -i nginx_xin_image.tar.gz  压缩的镜像解压docker images 进行查看复制代码

docker save 是直接将镜像进行打包 docker save <镜像名>或<镜像id>

docker export container_nginx> nginx_image.tar  cat nginx_image.tar | sudo docker import  - nginx_image:import复制代码

docker export 是直接将容器进行打包 docker export <容器名>或<容器id>

需要注意两种方法配套的,切不可混用。虽然导入导出时没问题,但是在创建容器时候会报错

如果使用import导入save产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,

会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。

类似,使用load载入export产生的文件,也会出现问题。

先写到这,文章略显粗糙,希望对您有一点用,学无止境加油!


作者:程序员内点事
链接:https://juejin.im/post/5e38e60d6fb9a07c9f3fcaed
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

crontab里shell脚本将top信息写入文件

crontab里shell脚本将top信息写入文件&#xff1a; 注&#xff1a; 1、top -n 1代表执行1次退出&#xff08;默认top是不退出的&#xff09;,-d 1代表每1秒执行1次 2、crontab里需加/bin/bash # crontab -e */5 * * * * /bin/bash /usr/local/bin/top.sh # vi top.sh #!/bin/ba…

leetcode 1030. 距离顺序排列矩阵单元格(bfs)

给出 R 行 C 列的矩阵&#xff0c;其中的单元格的整数坐标为 (r, c)&#xff0c;满足 0 < r < R 且 0 < c < C。 另外&#xff0c;我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。 返回矩阵中的所有单元格的坐标&#xff0c;并按到 (r0, c0) 的距离从最小到…

Linux iptables:规则原理和基础

什么是iptables&#xff1f; iptables是Linux下功能强大的应用层防火墙工具&#xff0c;但了解其规则原理和基础后&#xff0c;配置起来也非常简单。 什么是Netfilter&#xff1f; 说到iptables必然提到Netfilter&#xff0c;iptables是应用层的&#xff0c;其实质是一个定义规…

太阳系八大行星碰撞的视频_火星的身世:从太阳系的起源说起

大约46亿年前盘状的太阳星云从一大片又冷又暗的气体云中诞生太阳自己并没有任何暴露确切年龄的线索&#xff0c;我们之所以能够知道太阳系的“生日”&#xff0c;是因为迄今从陨石中找到的最古老固体物质&#xff0c;年龄约为45.68亿年。一般认为&#xff0c;太阳系的各个地方是…

refract推导_我们如何利用Refract来利用React式编程的力量

refract推导by Joe McGrath通过乔麦克格拉斯 我们如何利用Refract来利用React式编程的力量 (How we harnessed the power of reactive programming with Refract) Have you ever wondered how open-source libraries built by companies come into existence?您是否想过公司建…

sql server:查詢系統表

---查看所有存储过程或视图的位置 select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped0 and a.object_id b.object_id and a.[type] in (P,V,AF) order by a.[name] ASC GO--1、查看所有存储过程与函数 exec sp_store…

UDP数据包的大小

问题来源于日志信息&#xff0c;在这里总结一下&#xff0c;后续在补充新的内容。在链路层&#xff0c;由以太网的物理特性决定了数据帧的长度为&#xff08;46&#xff0b;18&#xff09;---&#xff08;1500&#xff0b;18&#xff09;&#xff0c;其中的18是链路层的首部和尾…

博科查看光功率_法拉第旋光器:非互易性旋转光的偏振

法拉第旋光器是利用法拉第效应制作的光学器件&#xff0c;当入射光正向(或反向)进入旋光器时&#xff0c;入射光偏振面会发生旋转。法拉第效应1845年&#xff0c;法拉第发现&#xff1a;当一束平面偏振光通过置于磁场中的磁光介质时&#xff0c;平面偏振光的偏振面就会随着平行…

Object.prototype 原型和原型链

Object.prototype 原型和原型链 原型 Javascript中所有的对象都是Object的实例&#xff0c;并继承Object.prototype的属性和方法&#xff0c;有些属性是隐藏的。换句话说&#xff0c;在对象创建时会存在预定义的属性&#xff0c;其中有一个属性就是原型对象。在函数对象中存在原…

leetcode 406. 根据身高重建队列(贪心算法)

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示&#xff0c;其中 h 是这个人的身高&#xff0c;k 是应该排在这个人前面且身高大于或等于 h 的人数。 例如&#xff1a;[5,2] 表示前面应该有 2 个身高大于等于 5 的人&#xff0c;而 [5,0] 表示前面不应该…

java和vue2.0

java中的el表达式${对象.属性}和vue中的双向数据绑定{{mode.xx}}感觉有点类似转载于:https://www.cnblogs.com/YangBinChina/p/11180460.html

oh-my-zsh官方教程

https://github.com/robbyrussell/oh-my-zsh/wiki

leetcode 134. 加油站

在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 如果你可以绕环路行驶一周&#…

ps怎么对比原图快捷键_PS学习之旅:ps如何制作满天星,让你夜晚的天空图片更美...

ps学习之旅&#xff0c;本文介绍关于如何利用ps软件来制作满天星&#xff0c;让你夜晚的天空图片更美&#xff0c;操作很简单哦。1工具/原料Adobe Photoshop CS6软件图片一张2效果展示原图&#xff1a;效果图&#xff1a;3方法/步骤(1)打开PS&#xff0c;选择你想要加星星的一张…

linux程序莫名异常怎么查

内存异常经常导致程序出现莫名其妙的错误&#xff0c;往往很难查证&#xff0c;本文介绍在linux下的各种常见内存异常的查证工具和方法。1 访问空指针/未初始化指针/重复释放内存对于像访问空指针、未初始化指针&#xff08;非法地址&#xff09;&#xff0c;重复释放内存等内存…

永磁直驱风力发电机结构图_国内首台10MW海上永磁直驱风力发电机研制成功

2019首届新能源产业投融资论坛2019年10月25日周老师&#xff1a;157129595968月21日&#xff0c;具有完全自主知识产权、国内首台10MW海上永磁直驱风力发电机在东方电气集团东方电机有限公司研制成功&#xff0c;以此优异成绩向新中国成立70周年献礼。10MW海上永磁直驱风力发电…

struts2官方 中文教程 系列六:表单验证

先贴个本帖的地址&#xff0c;以免被爬&#xff1a;struts2教程 官方系列六&#xff1a;表单验证 即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介绍 在本教程中&#xff0c;我们将探索使用Struts2来验证用户在表单上的输入。有两种方法可以来进…

Alictf 2015决赛题目设计和解题思路

解题思路&#xff1a; https://weibo.com/p/1001603836186467681086 设计题目&#xff1a; http://www.cnblogs.com/qsjmobilesec/p/4456090.html

【转载】 华为荣耀手机如何进入开发者模式

针对手机APP开发人员来说&#xff0c;很多时候开发手机APP应用的时候&#xff0c;需要进入手机的开发者模式中对程序进行调试等操作&#xff0c;此文将介绍华为荣耀手机如何进入开发者模式&#xff0c;以华为荣耀V9手机为例&#xff0c;华为荣耀V10、荣耀V20、华为P20、华为P30…

c++ dll 类使用_在.Net Core 中使用钩子

目录前言什么是钩子使用钩子3. 挂载多个钩子4. 在钩子中加载额外的程序集5. 在 Asp.Net Web Api 项目中使用钩子结束语演示代码下载前言Host startup hook&#xff0c;是2.2中提供的一项新的功能&#xff0c;通过使用主机启动钩子&#xff0c;允许开发人员在不修改代码的情况下…