Docker

一.什么是docker?

     它的目的是实现操作系统的虚拟化,docker的基础Linux容器,譬如说在开发中开发,测试,运维各需要一套环境,这时我们可以通过docker搭建好一套环境,其他的地方再需要用到直接可以从docker中复刻,这样一来就减少工作量。

二.容器的虚拟化技术和传统的虚拟机的比较

     1.本机的操作系统与容器的操作系统一致,而传统的是可以不一致的,譬如win上跑centOs

     2.docker所暂用的内存和磁盘空间可以是共用的,而后者,是事先分配好后就不能被其他的系统所共用

     3.docker启动速度快,占用体积小

三.镜像和容器注册中心

     1.镜像是用来运行容器的一组文件,镜像代表一个容器的模板,我们可以通过一个mysql镜像来创建多个mysql容器

     2.镜像可以说相当于一个类而容器相当于一个对象,通过镜像构建容器而我们操作容器

     3.注册中心(Registry)就是用来保存用户构建的镜像,registry分为公有和私有两种,Docker公司运营的公共Registry叫做Docker Hup,用户可以在上面分享并保存自己的镜像,还有一个种是私有的Redistry,用户可以自己构建。

四.常用命令

    ###docker 安装https://docs.docker.com/install/linux/docker-ce/ubuntu/#extra-steps-for-aufs

    ###镜像相关

   docker images(查询所有镜像)  || docker pull 镜像名(从中央仓库下载到本地)  ||docker pull centos:7(指定版本下载)

   docker search 镜像名O(搜索镜像)||docker dmi 镜像ID (删除镜像)

   ###容器相关

   docker ps(查询正在运行的容器) || docker ps -a(查询所有容器) || docker ps -l(查询最后一次运行的容器)

   docker ps -f status=exited(查看停止的容器)

   ###创建交互式容器

   docker run -it --name=myUbuntu(自己命名) 镜像名:标签 /bin/bash   #执行完这条命令后就会直接进入到容器内部,我们可以       将容器理解为一个小电脑,我们可以在里面部署一些软件 从容器退回宿主机可以用exit这个命令推出,推出后容器也会停止运     行

  ###创建守护式进程

  docker run -di --name=myUbuntu(自己命名) 镜像名:标签   #执行完这条命令后容器就已经在运行了,我们可以通过命令              docker  exec -it  容器名 /bin/bash   来进入容器  然后再可以使用exit来退出容器,但是容器任然是在运行的

  ###容器的启动与停止

  docker start 容器名/容器Id           docker stop 容器名/容器Id

 ###软件的拷贝

 docker cp 需要拷贝的文件或目录 容器名:容器目录  (文件拷入)

 docker cp 容器名:容器目录 需要拷贝的文件或目录

###目录挂载(宿主机与容器之间的某个文件或文件夹形成映射关系)

docker run -di -v 本地文件或文件夹路径:容器文件或文件夹路径 --name=容器名 镜像名:标签   碰到权限问题时需要加上参数--privileged=true来解决挂载目录没有权限的问题

###查看容器的IP地址

docker inspect 容器名/容器ID     docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名/容器Id

###删除容器

docker rm 容器名/容器Id

五.应用部署

###mysql部署

docker run -di --name=自己命名容器名称 -p 宿主机端口:mysql端口 -e MYSQL_ROOT_PASSWORD=123456 mysql镜像

示例 docker run -di --name=mysqlDemo -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

说明:mysqlDemo指我给容器的命名 -p后面的3307指我在宿主机声明的端口通过它来映射容器中的mysql端口3306,远程练级的时候就使用宿主机的3307来映射到容器的3306 -e后面的是声明容器中mysql root用户的初始密码

解决不能远程连接容器中的mysql:登录到容器中的mysql 执行如下命令,目的是让所有客户端都可以连接

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

###tomcat部署

###nginx部署

docker run -di --name=容器名 -p 80:80 镜像名 这里的端口映射根据实际使用来修改

###redis部署

docker run -di --name=容器名 -p 6300:6379 镜像名 

 

六.备份与迁移

###容器保存为镜像

docker commit mynginx mynginx_i    commit后面的第一个参数为容器名,第二个为保存为的镜像名

###镜像的备份

docker save -o mynginx.tar mynginx     这个命令表示将mynginx镜像保存为.tar的文件类型 

###镜像的恢复与迁移

docker load -i mynginx.tar    这个命令是将这个.tar的文件恢复为镜像

 

七.dockerFile

###什么是dockerFile

dockerFile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,简单说就是将在构建镜像中所有要做的事构建成一个脚本,在需要这个镜像的时候直接拿到这个dockerFile脚本就可以得到目标镜像

对于开发人员:可以为开发团队提供一个完全一致的环境

对于测试人员:可以直接拿开发时所构建的镜像或者通过dockerFile文件构建一个新的镜像

对于运维人员:在部署时可以实现应用的无缝迁移

###常用命令

FROM image_name:tag   //定义使用哪个基础镜像启动构建流程

MAINTAINER user_name  //声明镜像的创建者

ENV key value //设置环境变量(可以写多条)

RUN command //docker的核心部分(可写多条) 

ADD source_dir/file dest_dir/file //将宿主机的文件复制到容器内,如果是一个压缩文件会在复制后自动解压

COPY source_dir/file dest_dir/file //和ADD相似,但是如果有压缩文件并不会自动解压

WORKDIR path_dir //设置工作目录

Dockerfile文件书写完成后再执行 docker build -t='jdk1.8' . 这个命令就是执行完成好的Dockerfile文件jdk1.8是自己为镜像的命名后面的空格和点表示指定Dockerfile文件的路径 注意这里的Dockerfile的命名是固定的

###示例Dockerfile:

指定基础镜像
FROM ubuntu:14.04
#指定创建者信息
MAINTAINER binyuan
#指定当前目录
WORKDIR /usr
#创建目录
RUN mkdir /usr/local/java
#添加压缩包
ADD jdk-8u162-linux-x64.tar.gz /usr/local/java
#设置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_162
#设置JRE
ENV JRE_HOME /$JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin $PATH

docker build -t='jdk1.8' .    执行完这条命令后就可以通过docker images这条命令看到我们创建的jdk1.8这个镜像,需要注意在Dockerfile文件中打注释的时候只能另起一行通过#标识,否在会将注释当作参数

八.docker的私有仓库(指企业内部使用的仓库一般存放企业常用或自己构建的镜像)

###拉去私有仓库

docker pull registry

###启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry 然后需要在/etc/docker/daemon.json 的文件中加一个属性

"insecure-registries": ["宿主机ip:宿主机端口"] 目的是信任这个是有仓库,可以通过在浏览器输入宿主机ip:宿主机映射端口/v2/_catalog来查看私有仓库的存储情况

###将镜像上传至私有仓库

docker tag jdk1.8(要上传的镜像名)  镜像所在宿主机Ip:镜像所在宿主机端口/jdk1.8   给要上传的镜像打上标签,需要指明宿主机ip

docker push 镜像所在宿主机Ip:镜像所在宿主机端口/jdk1.8  上传标记到私有仓库

 

九.总结

说说我对docker的理解,docker中有镜像和容器这两种概念,镜像在我看来就是一个系统,镜像用来创建容器,有很多不同的镜像,譬如主键类的有mysql镜像,redis镜像等,系统类的有ubuntu,centos等,而容器是一个可以运行的系统,如果我们通过mysql镜像来创建一个容器那这个容器就相当于自带了mysq这个组件的功能,当然我们还可以在这个容器上安装其它组件来满足我们的项目开发,这样一来就好理解了,docker就是一个可以快速搭建开发或测试所需环境的工具,docker中一种脚本叫做Dockerfile它的作用就是可以在一个镜像的基础上再添加一些其它的功能,而我们把实现这个功能每一步的命令写在Dockerfile的文件中,当我们执行这个文件就会生成一个新的镜像在,这个镜像上有基础镜像的功能和我们新添加的功能。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值