docker初探和基础搭建
Docker 是什么?
- docker是一个开源的软件部署解决方案;
- docker也是轻量级的应用容器框架;
- docker可以打包、发布、运行任何的应用。
在我的粗浅理解中,docker就像是一个虚拟机,和vm、pd、vb间类似但又有很大的不同。它更适合于集群式的部署,例如同时部署在成百上千的服务器上,这是普通虚拟机软件所无法做到的。同时它又是一个极其轻量化的“虚拟机”,占用的资源很小,很适合部署在服务器上。另外它还有很强的可移植性、可操作性、自定义权限。
Docker 的一些基础概念
下面画一张图供大家更好的理解:

镜像:类似于虚拟机的iso、ova、vmk镜像
容器:可以看做是一个一个开启的虚拟机,相互独立,但可以通过volumns共享宿主机的一块存储
仓库:是一个大型的镜像库,里面有各种镜像,要使用的时候直接pull拉取下来即可使用。当然也可以将自己的镜像上传上去
Dockerfile:是用来构建镜像的构建文件,是由一系列命令和参数组成的构建脚本。
tar文件:可以将镜像打包成tar文件便于在其他地方传播
Docker 基本命令
docker images # 查看本地所有镜像
docker ps # 查看本地容器
docker rm [ID/NAME] # 删除容器
docker stop [ID/NAME] # 停止容器
docker restart [ID/NAME] # 重启容器
docker rmi [] # 删除本地镜像
docker pull nginx # 从镜像库下载最新nginx
docker run -d -p 81:80 --name test -v `pwd`:/usr/share/nginx/html nginx # 将nginx镜像的80端口映射到外面的81端口,命名为test,将外面的当前目录映射到容器的html目录,且在后台运行
docker exec -it [ID] bash # 进入这个容器的命令行
docker build -t [NAME] . # 以当前目录下的Dockerfile构建为名字NAME的镜像
docker commit [ID] [NAME] # 把ID这个容器封装成NAME这个镜像
docker save [NAME] > [NAME].tar # 把NAME这个镜像打包
docker load < [NAME].tar # 解包[NAME].tar为镜像
Docker 基本搭建
基本的docker安装直接google就好了。测试也可以使用docker的线上测试平台。
https://labs.play-with-docker.com
先从远程仓库下载一个1.20版本的nginx,如不写版本号则默认是最新版(不推荐)
docker pull nginx:1.20
下载完后查看下载的镜像
docker images

接下来启动这个镜像,生成一个新的容器
docker run -d -p 81:80 --name nginx_test -v /root:/home/docker nginx:1.20
-d 表示后台运行,不会直接接管当前控制台
-p 表示端口映射,这里表示用宿主机的81号端口映射这个容器的80端口
–name 给这个容器起个名字
-v 数据卷,将宿主机的一个目录映射到容器。这里表示将宿主机的/root目录映射到容器的/usr/share/nginx/html目录,这两个目录里的文件完全同步,有些类似于linux中的硬链接逻辑
最后加上要启动的镜像,或用ID表示
查看当前所有容器,可以看到nginx_test已经开起来,访问宿主机81号端口就能看到nginx生效了。
docker ps

为了测试volumns的环境,咋宿主机的/root目录写一个index.html
echo "haha" > index.html
接下来我们进入nginx_test的命令行。(exit可以退出)
docker exec -it nginx_test bash
nginx_test也可以用容器的前几位ID代替
查看/home/nginx就能看到index.html了。当我们修改这个目录里的东西,宿主机的/root里的东西也会跟着修改。

接着我们修改一下/usr/share/nginx/html/中的index.html。退回到宿主机
echo "haha123" > /usr/share/nginx/html/index.html
exit
接下来将nginx_test这个容器打包成镜像nginx_img
docker commit nginx_test nginx_img

接下来继续将镜像nginx_img打包成tar包
docker save nginx_img > nginx_test.tar

然后把镜像nginx_img和容器nginx_test删除
docker rmi nginx_img
docker rm -f nginx_test
把刚刚打包的tar释放出镜像来,然后就能在docker images中看到恢复的docker_img镜像,重新docker run起来访问81号端口就能看到我们刚刚写入的haha123了,说明打包后的镜像和原本的镜像是完全一样的,有些类似于虚拟机的快照。
docker load < nginx_img.tar

最后我们再尝试一下Dockerfile怎么玩
在宿主机/root目录下写一个Dockerfile
vi Dockerfile
FROM [] # 基于镜像
WORKDIR [] # 下面所有命令的工作目录(目标的)
COPY <本地路径> <目标路径> # 拷贝
RUN [] # 允许执行任意原生支持的shell命令(创建镜像时候使用)
CMD [ , ]
FROM nginx:1.20
ADD ./ /usr/share/nginx/html # 把宿主机当前目录下所有文件添加到容器的html目录中
然后基于这个Dockerfile进行构建
docker build -t m1 . # 最后的 . 表示在当前目录查找Dockerfile文件
run这个镜像就能发现已经成功将当前目录的文件复制到了html,首页也变成了haha
docker初探和基础搭建的更多相关文章
- 使用docker redis-cluster集群搭建
参考https://www.cnblogs.com/cxbhakim/p/9151720.html此文 主要搭建过程参考上文,此处讲下主要过程和遇到的坑 首先是镜像的基础搭建,我不知道是否是作者编写时 ...
- docker学习(2)--基础命令
转载请注明源出处:http://www.cnblogs.com/lighten/p/6875355.html 1.基本命令 搭建好docker环境之后,使用docker help命令查看docker的 ...
- ASP.NET Core & Docker & Jenkins 零基础持续集成实战
原文:ASP.NET Core & Docker & Jenkins 零基础持续集成实战 一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker ...
- 0基础搭建Hadoop大数据处理-编程
Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...
- Docker 安装和基础用法
理解Docker(1):Docker 安装和基础用法 本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 ...
- Docker+Jenkins+Maven+SVN搭建持续集成环境
Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...
- SpringBoot学习(一)—— web项目基础搭建
首先我们在浏览器打开这个网站 https://start.spring.io/ 打开后可以看到以下页面 在这里我们可以快速搭建一个SpringBoot基础项目,填写和选择完相应的信息后,我们点击那个绿 ...
- Ubuntu 基于Docker的TensorFlow 环境搭建
基于Docker的TensorFlow 环境搭建 基于(ubuntu 16.04LTS/ubuntu 14.04LTS) 一.docker环境安装 1)更新.安装依赖包 sudo apt-get up ...
- 【原】Spring整合Shiro基础搭建[3]
1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...
随机推荐
- 老司机带你体验SYS库多种新玩法
导读 如何更加愉快地利用sys库做一些监控? 快来,跟上老司机,体验sys库的多种新玩法~ MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还 ...
- Python3-sqlalchemy-orm 创建关联表带外键并查询数据
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...
- 过WAF的小思路
过WAF的小思路 前言 最近在学习了一波CMS漏洞,尝试看了几个菠菜站,有宝塔WAF...向WHOAMI大佬取经回来后,绕过了一个WAF.觉得是时候要认真总结一下了:) 前期的过程 菠菜采用的是Thi ...
- MyBatis的多表查询笔记
MyBatis的多表查询 随着学习的进步,需求的提高,我们在实际开发中用的最多的还是多表查询,就让我们一起学习MyBatis中的多表查询. 数据库准备 Class表 Student表 项目结构 这次使 ...
- KMP算法中的几个疑问
KMP算法next数组求解实现 首先我们通过应用场景将KMP算法中用到的名词做一个说明: 在一个字符串(string1)中查询是否存在另一个字符串(string2). 在字符串匹配算法中,我们通常将字 ...
- SpringBoot异步使用@Async原理及线程池配置
前言 在实际项目开发中很多业务场景需要使用异步去完成,比如消息通知,日志记录,等非常常用的都可以通过异步去执行,提高效率,那么在Spring框架中应该如何去使用异步呢 使用步骤 完成异步操作一般有两种 ...
- list使用详解
List双向链表 再谈链表 List链表的概念再度出现了,作为线性表的一员,C++的STL提供了快速进行构建的方法,为此,在前文的基础上通过STL进行直接使用,这对于程序设计中快速构建原型是相当有必要 ...
- PHP的OpenSSL加密扩展学习(三):证书操作
关于对称和非对称的加密操作,我们已经学习完两篇文章的内容了,接下来,我们就继续学习关于证书的生成. 生成 CSR 证书签名请求 CSR 是用于生成证书的签名请求,在 CSR 中,我们需要一些 dn 信 ...
- git tag标签
列出标签 # 默认按字母排序显示 $ git tag # 模糊匹配查找标签 $ git tag -l "v2.8.5*" 创建标签 # 创建附注标签 $ git tag -a v1 ...
- springboot多数据源配合docker部署mysql主从实现读写分离
本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...