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

1. 增加docker用户

sudo groupadd docker
sudo useradd -g docker docker

2. 增加centos7 的国内源

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

3. 更新系统

sudo yum update

4. 安装docker

yum install docker

5.启动docker

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

  

6. 测试安装nginx

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

7.删除测试的nginx容器

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

8. 指定容器nginx的参数

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.修改容器里面的配置文件

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

修复网页访问403错误

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

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 复制成另外一个容器

$docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx meerkat/nginx
启动原来的容器
$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)里面设置的

 location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

访问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 节的启动命令修改成:

$docker run --name nginx-001 -d -p 10080:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
$docker run --name nginx-002 -d -p 10081:80 -v /home/docker/nginx:/usr/share/nginx --restart=always meerkat/nginx
# 查看重启docker 是否容器可以重启
#systemctl restart docker
#docker ps -a
确定容器重新启动成功
[root@meerkat-docker docker]# systemctl start docker
[root@meerkat-docker docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
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
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/上查找。 
也可以用行命令查找

#查看docker hub 上查看mysql image 信息
$docker search mysql
$docker pull mysql
$docker run --name mysql-master-001 -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root-password --restart=always mysql
#通过navicate等客户端可以连接这个mysql
#进入容器进行设置
$docker exec -it mysql-master-001 bash
#保存容器
$docker commit mysql-master-001 meerkat/mysql-master-001
#停止当前的mysql-master-001容器。然后就可以删除原来的mysql image
#然后重新以meerkat/mysql-master-001的image 启动容器mysql-master-001
$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(未成功)

#使用cogniteev/oracle-java:java8这个image才是oralce jdk。否则是open jdk
#FROM java:8-jre
FROM cogniteev/oracle-java:java8 ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME # let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR # runtime dependencies for Tomcat Native Libraries
# Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available (1.0.2g+)
# see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion)
ENV OPENSSL_VERSION 1.0.2h-1
RUN { \
echo 'deb http://httpredir.debian.org/debian unstable main'; \
} > /etc/apt/sources.list.d/unstable.list \
&& { \
# add a negative "Pin-Priority" so that we never ever get packages from unstable unless we explicitly request them
echo 'Package: *'; \
echo 'Pin: release a=unstable'; \
echo 'Pin-Priority: -10'; \
echo; \
# except OpenSSL, which is the reason we're here
echo 'Package: openssl libssl*'; \
echo "Pin: version $OPENSSL_VERSION"; \
echo 'Pin-Priority: 990'; \
} > /etc/apt/preferences.d/unstable-openssl
RUN apt-get update && apt-get install -y --no-install-recommends \
libapr1 \
openssl="$OPENSSL_VERSION" \
&& rm -rf /var/lib/apt/lists/* # see https://www.apache.org/dist/tomcat/tomcat-8/KEYS
RUN set -ex \
&& for key in \
05AB33110949707C93A279E3D3EFE6B686867BA6 \
07E48665A34DCAFAE522E5E6266191C37C037D42 \
47309207D818FFD8DCD3F83F1931D684307A10A5 \
541FBE7D8F78B25E055DDEE13C370389288584E7 \
61B832AC2F1C5A90F0F9B00A1C506407564C17A3 \
713DA88BE50911535FE716F5208B0AB1D63011C7 \
79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED \
9BA44C2621385CB966EBA586F72C284D731FABEE \
A27677289986DB50844682F8ACB77FC2E86E29AC \
A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 \
DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 \
F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE \
F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.0.36
ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz RUN set -x \
\
&& wget -O tomcat.tar.gz "$TOMCAT_TGZ_URL" \
&& wget -O tomcat.tar.gz.asc "$TOMCAT_TGZ_URL.asc" \
&& gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz \
&& tar -xvf tomcat.tar.gz --strip-components=1 \
&& rm bin/*.bat \
&& rm tomcat.tar.gz* \
\
&& nativeBuildDir="$(mktemp -d)" \
&& tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 \
&& nativeBuildDeps=" \
gcc \
libapr1-dev \
libssl-dev \
make \
openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION \
" \
&& apt-get update && apt-get install -y --no-install-recommends $nativeBuildDeps && rm -rf /var/lib/apt/lists/* \
&& ( \
export CATALINA_HOME="$PWD" \
&& cd "$nativeBuildDir/native" \
&& ./configure \
--libdir="$TOMCAT_NATIVE_LIBDIR" \
--prefix="$CATALINA_HOME" \
--with-apr="$(which apr-1-config)" \
--with-java-home="$(docker-java-home)" \
--with-ssl=yes \
&& make -j$(nproc) \
&& make install \
) \
&& apt-get purge -y --auto-remove $nativeBuildDeps \
&& rm -rf "$nativeBuildDir" \
&& rm bin/tomcat-native.tar.gz # verify Tomcat Native is working properly
RUN set -e \
&& nativeLines="$(catalina.sh configtest 2>&1)" \
&& nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" \
&& nativeLines="$(echo "$nativeLines" | sort -u)" \
&& if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \
echo >&2 "$nativeLines"; \
exit 1; \
fi EXPOSE 8080
CMD ["catalina.sh", "run"]

  

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

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

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

server.xml 
  • 1

b. 编辑 Dockerfile

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

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

docker build -t meerkat/tomcat .

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

$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

$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

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

2.生成nginx 容器

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个-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. arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题

    访问 arch Linux 主机的该文件 [root@eric-laptop ~]# vim /etc/ssh/sshd_config 对应注释部分后边补上下边三行: LoginGraceTime 1 ...

  2. python和jupyter安装

    python官网:https://www.python.org/ 进去之后选择适合自己电脑的系统类型,安装,我的是windows  下载之后,双击打开 在安装时请勾选上add to path 选项,安 ...

  3. pycharm 执行unittest 没有生成测试报告

    解决: [第一步] [第二步]

  4. Swapping Characters CodeForces - 903E (字符串模拟)

    大意: 给定k个字符串, 长度均为n, 求是否存在一个串S, 使得k个字符串都可以由S恰好交换两个字符得到. 暴力枚举交换的两个字符的位置, 计算出交换后与其他串不同字符的个数, 若为1或>2显 ...

  5. openLDAP环境搭建

    OpenLDAP搭建   PS:本次实验是基于centos7,OpenLDAP使用2.4.44版本. 一.初始化环境 1.初始化环境 命令如下: ntpdate -u ntp.api.bz & ...

  6. 多线程中Object的wait(),notify()和Condition的wait()和singal()对锁的关联

    通常将共享资源的操作放置在Sysnchronized定义的区域内,这样当其他线程也获取到这个锁时,必须的等待锁被释放时才能进入该区域.Object为任意一个对象,每个对象都存在一个标志位,并具有两个值 ...

  7. C++获取数组的长度

    C++获取数组的长度 #include<iostream> using namespace std; template<class T> int length(T& a ...

  8. Android : 跟我学Binder --- (6) JAVA实现

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  9. 指导手册02:伪分布式安装Hadoop(ubuntuLinux)

    指导手册02:伪分布式安装Hadoop(ubuntuLinux)   Part 1:安装及配置虚拟机 1.安装Linux. 1.安装Ubuntu1604 64位系统 2.设置语言,能输入中文 3.创建 ...

  10. L328 What Is Millennial Burnout?

    What Is Millennial Burnout?Do you often feel stressed? Does the pace of life make you feel like you' ...