一、Docker的安装和启动

使用环境centos7

  1. yum包更新到最新
    sudo yum update
  2. 安装需要的软件包,yum-util提供yum-config-manager功能
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 设置yum源为阿里云
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安装docker
    sudo yum install docker-ce
  5. 安装查看docker版本
    docker -v
  6. 设置 docker镜象拉取提供者
    编辑文件:vi  /etc/docker/daemon.json
    在该文件中输入:
    {
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
    }
  7. 启动、重启、停止、加入服务
      systemctl start docker  启动
    systemctl status docker 查看状态
    systemctl enable docker 开机自启动
  8. 镜像相关的命令
      查看镜像
    docker images
    搜索
    docker search nginx
    拉取
    docker pull nginx
    删除 (有运行的容器不能删除)
    docker rmi 镜像ID
    删除所有
    docker rmi `docker imgaes -q`

二、容器相关的命令

  1. 查看运行中的容器
    docker ps
    docker ps -a 查看没有运行和运行的
  2. 创建与启动容器

    2.1 创建容器命令:
    docker run
    -i : 表示运行容器
    -t :表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端
    --name:为创建的容器命名
    -v : 表示目录映射关系(前者是宿主机器目录,后者是映射到宿主机上的目录)可以使用多个 -v做多个目录或文件映射
    注意:最好做目录映射,在宿主机上做修改然后共享到容器上
    -d : 在run后面加上-d参数,则会创建一个守护式容器运行在后台(这样创建的容器不会自动登录到容器)
    -p : 表示端口映射,前者是宿主机器端口。后者是容器内的映射端口,可以使用多个 -p 做多个端口映射

    2.2 交互式方式创建容器

    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    例:docker run -it --name=mycentos centos:7 /bin/bash
    退出当前容器 exit

    2.3 守护式方式创建容器

    docker run -id --name=容器名称 镜像名称:标签
    例如: docker run -id --name=mycentos2 centos:7
    进入容器
    docker exec -it 容器名称 /bin/bash
    退出当前容器 exit
    例如:docker exec -it mycentos2 /bin/bash

    2.4 启动容器与停止容器

    停止容器: docker stop 容器名称(或者容器ID)
    启动容器: docker start 容器名称 (或者容器Id)

    2.5 文件拷贝( 如果我们需要将宿主机文件拷贝到容器里面 )

    宿主机 ---> 容器
    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    例:docker cp anaconda-ks.cfg mycentos2:/usr/local
    容器文件 ----> 宿主机器
    docker cp 容器名称:容器目录 需要拷贝的文件或目录
    例:docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks.cfg

    2.6 目录挂载(将宿主的目录与容器内目录进行映射,这样我们就可以通过修改宿主机器某个目录的文件去影响容器的文件)

    创建容器 添加-v参数 后边为 宿主机器目录:容器目录,
    例: docker run -di --name=mycentos3 -v /home/myhtml:/home/myhtml centos:7
    如果权限不足提示:
    因为centos7的安全模块selinux把权限禁止掉了。我们需要添加参数 -privileged=true来解决目录没有权限的问题

    2.7 查看容器的IP

    查看容器信息:
    例:docker inspect mycentos3
    查看容器的ip信息:(格式化提取)
    例:docker inspect --format="{{.NetworkSettings.IPAddress}}" mycentos3
    移除容器 (不能移除正在运行的)
    例:docker rm mycentos3

三、docker应用部署

  1. mysql部署

    1.1 拉取mysql镜像

    docker pull centos/mysql-57-centos7

    1.2 创建容器

     docker run -di --name=cason_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql centos/mysql-57-centos7
    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
    -e 代表添加环境变量, MYSQL_ROOT_PASSWORD 是root用户的登陆密码

    1.3 进入mysql容器

    docker exec -it cason_mysql /bin/bash

    1.4 登陆mysql

    mysql -u root -p

    1.5 远程登陆mysql

    连接宿主机的IP,指定端口为33306

  2. tomcat部署

    2.1 拉取镜像

    docker pull tomcat:7-jre7

    2.2 创建容器

    docker  run -di --name=cason_tomcat -p 10001:8080 -v /home/local/webapps:/usr/local/tomcat/webapps tomcat:8-jre8
    • /home/local/webapps 代表宿主机目录
    • /usr/local/tomcat/webapps 容器tomcat的部署目录
  3. 部署nginx

    3.1 拉取镜像 docker pull nginx

    3.2 创建镜像 docker run -di --name=mynginx -p 80:80 nginx

  4. 部署redis

    4.1 拉取镜像 docker pull redis

    4.2 创建镜像 docker run -di --name=myredis -p 6379:6379 redis

四、docker迁移与备份

  1. 容器保存为镜像

    docker commit cason_nginx caosn_nginx_1
  2. 镜像备份(cason_nginx.tar文件导出在当前目录)

    docker save -o cason_nginx.tar cason_nginx_2
  3. 镜像回复

    docker load -i cason_nginx.tar

六、Dockerfile

  1. 概念:Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于 基础镜像并最终创建一个新的镜像

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

    2、对于测试人员:可以直接拿开发时构建的镜像或通过Dockerfile构建一个新镜像

    3、对于运维人员:在部署时,可以实现应用的无缝一致

  2. 常用命令:

    命令 作用

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

    MAINTAINER user_name 声明镜像的创建者

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

    RUN command 是Dockerrfile的核心部分(可以写多条)

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

    COPY source_dir/file 和ADD像是 。但如果有压缩文件并不能解压

    WORKDIR path_dir 设置工作目录

  3. 使用脚本创建镜像的

    例如构建一个jdk8的centos7镜像:

    Dockerfile脚本如下:

      FROM centos:7
    MAINTAINER cason
    WORKDIR /usr
    RUN mkdir /usr/local/java
    ADD jdk-8u172-linux-x64.tar.gz /usr/local/java/ ENV JAVA_HOME /usr/local/java/jdk1.8.0_172
    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

    同时在当前目录添加 jdk-8u172-linux-x64.tar.gz 安装包

  4. 脚本完成后执行构建: docker build -t='jdk1.8' .

    -t 代表指定构建后的docker的名称

    . 点代表指定当前目录

  5. docker 启动 web 示例报错如下:

    Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797 -j DNAT --to-destination 172.17.0.30:5000 ! -i docker0: iptables: No chain/target/match by that name.

    解决办法:重建docker0网络恢复

    pkill docker  # 杀死docker进程
    iptables -t nat -F # 清空规则链的(注意每个链的管理权限)
    ifconfig docker0 down # 停止docker0的ip连接
    brctl delbr docker0 # 重新桥接docker0的网络
    docker -d # 开启Daemon模式。
    service docker restart # 重启docker

七、Docker私有库

  1. 私有仓库的搭建与配置

    1.1 拉取私有仓库镜像 docker pull registry

    1.2 创建私有仓库容器 docker run -di --name=registry -p 5000:5000 registry

    1.3 创建成功后 在浏览器输入:宿主机IP+5000端口 例如 http://192.168.110.141:5000/v2/_catalog

    查看到了 {"repositories":[]} 表示成功并且内容为空

    1.4 修改daemon.json

    vi /etc/docker/daemon.json 添加内容

    {"insecure-registries":["192.168.110.141:5000"]}

    1.5 重启docker

    systemctl restart docker

  2. 镜像上传至私有仓库

    2.1 标记镜像为私有仓库的镜像

    docker tag jdk1.8 192.168.110.141:5000/jdk1.8

    2.2 上传标记的镜像 (要保证私库的容器正在运行着)

    docker push 192.168.110.141:5000/jdk1.8

八、DockerMaven插件

Maven插件自动部署步骤:(配置:https://www.cnblogs.com/atliwen/p/6101946.html)

  1. 修改宿主机器的docker的配置,让其可以远程访问

    vi /lib/systemd/system/docker.service

    添加部分是:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

    修改为:

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  2. 刷下docker配置
    systemctl daemon-reload
    systemctl restart docker
    docker start registry
  3. 在pom.xml文件添加 docker配置
     <build>
    <finalName>app</finalName>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <!-- docker的maven插件,官网 https://github.com/spotify/docker-maven-plugin -->
    <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
    <imageName>192.168.110.141:5000/${project.artifactId}:${project.version}</imageName>
    <!--<dockerDirectory>src/main/docker</dockerDirectory>-->
    <baseImage>java:8</baseImage>
    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
    <resources>
    <resource>
    <targetPath>/</targetPath>
    <directory>${project.build.directory}</directory>
    <include>${project.build.finalName}.jar</include>
    </resource>
    </resources>
    <dockerHost>http://192.168.110.141:2375</dockerHost>
    </configuration>
    </plugin>
    </plugins>
    </build>
  4. 以上配置会自动生成Dockerfile
      FROM jdk1.8
    ADD aap.jar /
    ENTRYPOINT ["java","-jar","/app.jar"]
  5. 在windows的命令提示符下,进入当前工程的目录 ,输入以下命令 打包上传镜像

    命令:mvn clean package docker:build -DpushImage
        I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: Broken pipe
    导致这个错误的原因是 project.artifactId 可能包含了大写
  6. 创建容器

    docker run -di --name=base -p 8088:8088 192.168.110.141:5000/springboot-demo:1.0.0-SNAPSHOT

    端口8088 因为springboot-demo项目的端口就是8088
  7. 直接浏览器输入 http://192.168.110.141:8088/user/1 这就是访问docker里面的boot项目

docker 简要学习的更多相关文章

  1. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  2. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

  3. 在Windows环境中开始Docker的学习和体验

    研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...

  4. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

  5. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  6. docker深入学习

    docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...

  7. 服务器搭建远程docker深度学习环境

    服务器搭建远程docker深度学习环境 本文大部分内容参考知乎文章 Docker+PyCharm快速搭建机器学习开发环境 搭建过程中出现ssh连接问题可以查看最后的注意事项 Docker Docker ...

  8. docker 基本学习

    Docker的应用场景: 加速本地开发和构建流程,使其更加高效.更加轻量化.本地开发人员可以构建.运行并分享Docker容器.容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境. ...

  9. Docker命令学习

    今天更换腾讯云系统的时候发现了多了个CoreOS,据说是专门运行docker的轻量系统,顺便学习一下docker命令. 1. docker version 显示 Docker 版本信息. 2. doc ...

随机推荐

  1. asp.net mvc +easyui 实现权限管理(一)

    权限是每个企业应用必须的模块,可以简单,也能比较复杂.目前我们公司的权限要求是 能管控页面.字段.按钮.以及数据权限. 正好公司的进销存系统权限模块由我负责.做完后做下记录是个不错的习惯,知识是慢慢积 ...

  2. [转]Linux内核最新的连续内存分配器(CMA)——避免预留大块内存

    http://blog.csdn.net/21cnbao/article/details/7309757 在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等 ...

  3. Spring Boot -01- 快速入门篇(图文教程)

    Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...

  4. java 接口默认修饰符

    概论: java接口可以是public 的,也可以是friendly的,但一定是abstracted的. java接口里的方法只能是public的.abstract的. java接口里的成员变量只能是 ...

  5. for循环内嵌套finally使用的意外获得

    在for循环中有continue和break,无论执行continue还是break   finally的逻辑都会执行,原本以为是不执行的 格式 for (int i = 0; i < 3; i ...

  6. 如何判断一个整数是否是2的N次幂

    static bool CheckPowerOfTwo(ulong num) { && (num & (num - )) == ; }

  7. linux下yum安装指定的mysql版本

    因为直接使用yum安装的mysql会是默认版本5.1的版本  但是有的同学不满足又想要其他版本的怎么办呢? 曾时候我来提供一种方案(仅供参考): 我们可以使用rpm包来进行指定mysql版本的安装, ...

  8. Logstash和Flume-NG Syslog接收小测试

    目前在大规模日志处理平台中常见的日志采集器可以采用Logstash或Flume.这两种日志采集器架构设计理念基本相似,都采用采集-过滤处理-输出的方式.下面对这两种采集器Syslog接收性能做个简单测 ...

  9. 如何从Microsoft web platform installer取得离线安装包

    有一架visual studio 2012的开发环境A由于某种原因无法链接internet, 于是乎安装officetoolsforvisual2012就有问题了. 从微软的官网上只可以下载 offi ...

  10. Php发送post请求方法

    因为自己时常用到 所以还是发布一下吧 /** * 发送post请求 * @param string $url 请求地址 * @param array $post_data post键值对数据 * @r ...