一、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. Hadoop总结

    背景 Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Mapreduce1 vs YA ...

  2. Android自定义Button按钮显示样式

    关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法. 首先android的selector是在 ...

  3. mybatis resultMap 映射配置

    现有数据库表: CREATE TABLE `dept_p` ( `DEPT_ID` ) NOT NULL, `DEPT_NAME` ) DEFAULT NULL, `PARENT_ID` ) DEFA ...

  4. 【Java】得到当前股票信息

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; ...

  5. 用UITextView模拟UITextField的placeHolder

    用UITextView模拟UITextField的placeHolder 效果: 源码: // // ViewController.m // TextView // // Created by You ...

  6. [翻译] DKTagCloudView - 标签云View

    DKTagCloudView 效果(支持点击view触发事件): Overview DKTagCloudView is a tag clouds view on iOS. It can generat ...

  7. 【数据结构】 顺序表查找(折半查找&&差值查找)

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 10 首先构造一个 ...

  8. win7 64 &vs2010 与 opengl配置

    http://blog.csdn.net/lixam/article/details/7618015 http://blog.sina.com.cn/s/blog_7745fc8601017m36.h ...

  9. mysql常见问题总结

    061 如何删除表? 答案:运行命令 drop table table_name; 062 创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成 ...

  10. 第 6 章 C控制语句:循环

    6.16.3 使用嵌套循环,按下面格式打印字母: F FE FED FEDC FEDCB FEDCBA #include <stdio.h> int main() { ; ); row ! ...