一.CentOS7(64)上安装和使用docker的笔记。

1. 增加docker用户

  1. sudo groupadd docker
  2. sudo useradd -g docker docker

2. 增加centos7 的国内源

  1. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  2. yum makecache

3. 更新系统

  1. sudo yum update

4. 安装docker

  1. yum install docker

5.启动docker

  1. (1)启动,systemctl start docker.service
  2. (2)开机启动,systemctl enable docker.service
  3. (3)帮助,docker --help
  4. (4)概要信息,docker info
  5. (5)镜像查看,docker images
  6. (6)容器查看,即进程查看,docker ps -a

  

6. 测试安装nginx

  1. (1)下载镜像,docker pull nginx
  2. (2)启动容器,docker run -d -p 8080:80 nginx,把容器内的nginx80端口,映射到当前服务器的8080端口,当前服务器的ip192.168.1.120,浏览器输入http://192.168.1.120:8080/,就可以看到nginx已启动,
  3. (3)再启动多一个容器,docker run -d -p 8081:80 nginx,浏览器输入http://192.168.1.120:8081/,就可以看到另外一个nginx已启动
  4. 也可以通过curl 127.0.0.1:8080 来测试是否打开相应端口
  5. (4)到这里就能体现出Docker部署应用和传统部署应用的区别了,传统部署的话,需要人工拷贝多一份nginx,再配置端口,而Docker部署的话,在已制作好的镜像基础上,一条命令就可以部署一个新的应用

7.删除测试的nginx容器

  1. (1)docker ps -a
  2. 可以显示容器id
  3. 停止容器
  4. (2)docker stop 8dc6a2b6f903
  5. 删除容器
  6. (3)docker rm 8dc6a2b6f903

8. 指定容器nginx的参数

  1. docker run --name nginx-001 -d -p 8080:80 -v /home/docker/nginx/html:/usr/share/nginx/html nginx

-p 参数是把 宿主的8080端口映射到容器的80端口 
这里要注意-v是数据卷,可以主机和容器之间共享/home/docker/nginx/html这个目录,在容器里面就是/usr/share/nginx/html。其实这就是我们的代码目录,调试代码就是靠共享目录实现的,很方便!!

9.修改容器里面的配置文件

  1. #进入容器
  2. $docker exec -it nginx-001 bash
  3. #安装工具
  4. apt-get update
  5. apt-get install vim
  6. #查看和修改nginx的配置信息
  7. vim /etc/nginx/conf.d/default.conf

修复网页访问403错误

  1. 由于在容器里面 nginx配置的web根目录是 /usr/share/nginx/html ,对应到系统的目录是/home/docker/nginx/html 会有权限的问题。
  2. 这个实现需要关闭SELinux重新发布一次
  3. vim /etc/selinux/config
  4. SELINUX=enforcing改为SELINUX=disabled
  5. 然后重启
  6. 删除原来的容器,重新发布一下容器。
  7. 访问

10.保存自己的contianer

保存对容器的修改

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。 
目标:

首先使用docker ps -l命令获得安装完ping命令之后容器的id。然后把这个镜像保存为learn/ping。 
提示:

  1. 运行docker commit,可以查看该命令的参数列表。
  2. 你需要指定要提交保存容器的ID。(译者按:通过docker ps -l 命令获得)
  3. 无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版本号) 
    正确的命令:

$docker commit 2251e3fac654 meerkat/nginx-001 
然后通过docker images 可以查看 container 保存成的image

11.把当前的image 复制成另外一个容器

  1. $docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx meerkat/nginx
  2. 启动原来的容器
  3. $docker run --name nginx-002 -d -p 10081:80 -v /home/docker/nginx:/usr/share/nginx meerkat/nginx

这个时候访问 宿主的ip 和端口 
http://192.168.1.120:10080 
http://192.168.1.120:10081 
由于在nginx的容器里面 nginx的配置文件(/etc/nginx/conf.d/default.conf)里面设置的

  1. location / {
  2. root /usr/share/nginx/html;
  3. index index.html index.htm;
  4. }

访问url指向的是 /usr/share/nginx/html目录 
而启动容器的时候指定这个容器的/usr/share/nginx目录是指向宿主的/home/docker/nginx目录,所以浏览器 
都是显示宿主机器上/home/docker/nginx/html里面的index.html的内容

12. 容器自动重启

使用在docker run的时候使用–restart参数来设置。 
no - container:不重启 
on-failure - container:退出状态非0时重启 
always:始终重启 
所以 11 节的启动命令修改成:

  1. $docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
  2. $docker run --name nginx-002 -d -p 10081:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
  3. # 查看重启docker 是否容器可以重启
  4. #systemctl restart docker
  5. #docker ps -a
  6. 确定容器重新启动成功
  7. [root@meerkat-docker docker]# systemctl start docker
  8. [root@meerkat-docker docker]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. f22e93cba355 meerkat/nginx "nginx -g 'daemon off" About a minute ago Up 2 seconds 443/tcp, 0.0.0.0:10081->80/tcp nginx-002
  11. 255d77c725d0 meerkat/nginx "nginx -g 'daemon off" About a minute ago Up 2 seconds 443/tcp, 0.0.0.0:10080->80/tcp nginx-001

二. 安装mysql 的过程

1. 安装mysql 最新版本的image

可以在https://hub.docker.com/上查找。 
也可以用行命令查找

  1. #查看docker hub 上查看mysql image 信息
  2. $docker search mysql
  3. $docker pull mysql
  4. $docker run --name mysql-master-001 -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root-password --restart=always mysql
  5. #通过navicate等客户端可以连接这个mysql
  6. #进入容器进行设置
  7. $docker exec -it mysql-master-001 bash
  8. #保存容器
  9. $docker commit mysql-master-001 meerkat/mysql-master-001
  10. #停止当前的mysql-master-001容器。然后就可以删除原来的mysql image
  11. #然后重新以meerkat/mysql-master-001的image 启动容器mysql-master-001
  12. $docker run --name mysql-master-001 -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root-password --restart=always meerkat/mysql-master-001

三.安装tomcat 集群

1.使用自己编写的Dockerfile来定制tomcat 容器

使用oracle 的 java 8 , tomcat 8.0 的最新版本。tomcat支持apr(未成功)

  1. #使用cogniteev/oracle-java:java8这个image才是oralce jdk。否则是open jdk
  2. #FROM java:8-jre
  3. FROM cogniteev/oracle-java:java8
  4.  
  5. ENV CATALINA_HOME /usr/local/tomcat
  6. ENV PATH $CATALINA_HOME/bin:$PATH
  7. RUN mkdir -p "$CATALINA_HOME"
  8. WORKDIR $CATALINA_HOME
  9.  
  10. # let "Tomcat Native" live somewhere isolated
  11. ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
  12. ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
  13.  
  14. # runtime dependencies for Tomcat Native Libraries
  15. # Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available (1.0.2g+)
  16. # see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion)
  17. ENV OPENSSL_VERSION 1.0.2h-1
  18. RUN { \
  19. echo 'deb http://httpredir.debian.org/debian unstable main'; \
  20. } > /etc/apt/sources.list.d/unstable.list \
  21. && { \
  22. # add a negative "Pin-Priority" so that we never ever get packages from unstable unless we explicitly request them
  23. echo 'Package: *'; \
  24. echo 'Pin: release a=unstable'; \
  25. echo 'Pin-Priority: -10'; \
  26. echo; \
  27. # except OpenSSL, which is the reason we're here
  28. echo 'Package: openssl libssl*'; \
  29. echo "Pin: version $OPENSSL_VERSION"; \
  30. echo 'Pin-Priority: 990'; \
  31. } > /etc/apt/preferences.d/unstable-openssl
  32. RUN apt-get update && apt-get install -y --no-install-recommends \
  33. libapr1 \
  34. openssl="$OPENSSL_VERSION" \
  35. && rm -rf /var/lib/apt/lists/*
  36.  
  37. # see https://www.apache.org/dist/tomcat/tomcat-8/KEYS
  38. RUN set -ex \
  39. && for key in \
  40. 05AB33110949707C93A279E3D3EFE6B686867BA6 \
  41. 07E48665A34DCAFAE522E5E6266191C37C037D42 \
  42. 47309207D818FFD8DCD3F83F1931D684307A10A5 \
  43. 541FBE7D8F78B25E055DDEE13C370389288584E7 \
  44. 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \
  45. 713DA88BE50911535FE716F5208B0AB1D63011C7 \
  46. 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \
  47. 9BA44C2621385CB966EBA586F72C284D731FABEE \
  48. A27677289986DB50844682F8ACB77FC2E86E29AC \
  49. A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \
  50. DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \
  51. F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \
  52. F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23 \
  53. ; do \
  54. gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
  55. done
  56.  
  57. ENV TOMCAT_MAJOR 8
  58. ENV TOMCAT_VERSION 8.0.36
  59. ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
  60.  
  61. RUN set -x \
  62. \
  63. && wget -O tomcat.tar.gz "$TOMCAT_TGZ_URL" \
  64. && wget -O tomcat.tar.gz.asc "$TOMCAT_TGZ_URL.asc" \
  65. && gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz \
  66. && tar -xvf tomcat.tar.gz --strip-components=1 \
  67. && rm bin/*.bat \
  68. && rm tomcat.tar.gz* \
  69. \
  70. && nativeBuildDir="$(mktemp -d)" \
  71. && tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 \
  72. && nativeBuildDeps=" \
  73. gcc \
  74. libapr1-dev \
  75. libssl-dev \
  76. make \
  77. openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION \
  78. " \
  79. && apt-get update && apt-get install -y --no-install-recommends $nativeBuildDeps && rm -rf /var/lib/apt/lists/* \
  80. && ( \
  81. export CATALINA_HOME="$PWD" \
  82. && cd "$nativeBuildDir/native" \
  83. && ./configure \
  84. --libdir="$TOMCAT_NATIVE_LIBDIR" \
  85. --prefix="$CATALINA_HOME" \
  86. --with-apr="$(which apr-1-config)" \
  87. --with-java-home="$(docker-java-home)" \
  88. --with-ssl=yes \
  89. && make -j$(nproc) \
  90. && make install \
  91. ) \
  92. && apt-get purge -y --auto-remove $nativeBuildDeps \
  93. && rm -rf "$nativeBuildDir" \
  94. && rm bin/tomcat-native.tar.gz
  95.  
  96. # verify Tomcat Native is working properly
  97. RUN set -e \
  98. && nativeLines="$(catalina.sh configtest 2>&1)" \
  99. && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
  100. && nativeLines="$(echo "$nativeLines" | sort -u)" \
  101. && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
  102. echo >&2 "$nativeLines"; \
  103. exit 1; \
  104. fi
  105.  
  106. EXPOSE 8080
  107. CMD ["catalina.sh", "run"]

  

2.或者从现成的hub上tomcat 的image 进行改造

由于版权的关系,只找到用open jdk 来配置的tomat

a. copy需要在image中需要定制的tomcat的配置文件到当前目录

  1. server.xml
  • 1

b. 编辑 Dockerfile

  1. FROM tomcat:8.0.36-jre8
  2. MAINTAINER "roamer <roamerxv@gmail.com>"
  3. #自定义的配置文件,以替换原有image中的配置文件
  4. ADD server.xml /usr/local/tomcat/conf/
  5. ADD tomcat-users.xml /usr/local/tomcat/conf/
  6. ADD probe.war /usr/local/tomcat/webapps/
  7. RUN apt-get update && apt-get install vim -y

3.编译生成本地命名为meerkat/tomcat的image

  1. docker build -t meerkat/tomcat .

4.根据这个image生成,并且启动2个 container

  1. $docker run --name tomcat-001 -d -p 18081:8080 -v /opt/meerkat:/opt/meerkat -v /home/docker/tomcat/tomcat-001-logs:/usr/local/tomcat/logs --restart=always meerkat/tomcat
  2.  
  3. $docker run --name tomcat-002 -d -p 18082:8080 -v /opt/meerkat:/opt/meerkat -v /home/docker/tomcat/tomcat-002-logs:/usr/local/tomcat/logs --restart=always meerkat/tomcat

四.安装nginx和tomcat的动静分离

1.通过Dockerfile来生成自己的nginx image

  1. $cd /home/docker/nginx
  2. nginxtomcat做动静分离需要的配置文件复制到当前目录
  3. nginx.conf
  1. 编辑Dockerfile文件
  1. FROM nginx
  2. MAINTAINER "roamer <roamerxv@gmail.com>"
  3. #自定义的配置文件,以替换原有image中的配置文件
  4. ADD nginx.conf /etc/nginx
  5. RUN apt-get update && apt-get install vim -y

2.生成nginx 容器

  1. docker run --name nginx -d -p 80:80 -v /opt/meerkat:/opt/meerkat -v /home/docker/nginx/logs:/var/log/nginx --restart=always meerkat/nginx
  2. #这里的2个-v 共享卷 是用于配置web应用目录和日志输出目录
版权声明:本文为博主原创文章,未经博主允许不得转载。

CentOS7 上学习使用docker的更多相关文章

  1. 如何在Centos7上安装&使用docker

    Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且 ...

  2. 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w

    镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...

  3. Centos7上docker的安装和基本使用

    Centos7上Docker的相关操作 Docker的安装 1.检查内核版本 docker使用linux的内核必须是3.10以上,首先需要 # uname -r 2.使用yum安装docker # y ...

  4. Docker实践(6)—CentOS7上部署Kubernetes

    Kubernetes架构 Kubernetes的整体架构如下: Master为主控节点,上面运行apiserver,scheduler,controller-manager等组件.Minion相当于工 ...

  5. Centos7上安装docker (转)

    Centos7上安装docker Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如 ...

  6. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

  7. centos7上docker安装和使用教程

    Docker 是一个创建和管理 Linux 容器的开源工具.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上 ...

  8. centos7上基于kubernetes的docker集群管理

    kubernetes和docker的作用这里就不作介绍了,直接进入主题. 本文的目的是搭建docker集群,并使用kubernetes管理它们. 文中的软件环境除了kubernetes和docker, ...

  9. 在centos7上用docker安装宝塔面板

    在centos7上用docker安装宝塔面板   1. [root@web01 ~]# systemctl enable docker 2. [root@web01 ~]# docker pull c ...

随机推荐

  1. java去除表达符号的正则表达式

    java 去标点符号正则表达式 博客分类: 小功能 正则表达式标点符号  public static void main(String[] args) {String s = "哈哈!@#W ...

  2. python--接口开发

    一.接口开发需要用到flask类1.首先安装flask类:cmd--pip install flask2.导入flask类:import flask3.以下是用一个例子来说明: import flas ...

  3. QComboBox样式

    https://blog.csdn.net/lys211/article/details/43956979https://blog.csdn.net/x_nazgul/article/details/ ...

  4. 34 char类型转换为int类型

    #include<iostream> #include<cstdlib > using namespace std; int main() { char a=101; int ...

  5. jmeter解决request response中文乱码问题

    一:主要内容 解决request请求入参中文乱码问题 解决response响应数据中文乱码问题 二:解决request和response中文乱码问题 request结果:-中文已经不乱码了 respo ...

  6. mvvm框架

    了解mvvm框架吗 vue.js react.js angular.js 谈谈你对mvvm的认识 mvc View :用来把数据以某种方式呈现给用户 Model :其实就是数据 Controller  ...

  7. intelij idea设置成eclipse快捷键

    1.导入jar包文件: https://pan.baidu.com/s/1QSd_CY5X_dUUw74evbckXg  密码: 23rq 2.idea -->settting ---> ...

  8. 过滤器(filter),监听器(listener),与servlet的执行顺序

    创建: 加载顺序 监听器-->过滤器-->Servlet.项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.销毁的时候是反序进行 ...

  9. 唤醒实验(java

    package sy;import java.util.Random; public class random { public static void main(String[] args) { / ...

  10. JavaWeb基础-过滤器监听器

    过滤器 1定义:过滤器是一个服务器的组件,他可以截取用户端的请求与响应信息,并对这些信息进行过滤;过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 2过滤器的工作原理: 3过滤器 ...