Docker技术入门及实战笔记总结(超长5页纸)

  • 什么是docker
  • Docker是干嘛的---部署优势
  • Docker安装(环境:centos7)
  • Docker运行tomcat环境
  • Docker利用Tomcat和MySQL容器部署服务
  • Docker部署springboot
  • Docker命令介绍
  • Dockerfiles文件参数介绍
  • Docker 实际操作
  • Docker创建一个包含多个tomcat的centos镜
  • 镜像内的东西与镜像外的服务器相互拷贝
  • 镜像导入导出


什么是docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3月以 Apache 2.0 授权协议开源),主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动开放容器联盟。

Docker是干嘛的—部署优势

  1. 更高效的利用系统资源
  2. 更快速的启动时间
  3. 一致的运行环境
  4. 持续交付和部署
  5. 更轻松的迁移
  6. 更轻松的维护和扩展

Docker安装(环境:centos7)

激活centos7的网卡设置
激活网卡:在文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 中
进入编辑模式,将 ONBOOT=no 改为 ONBOOT=yes,就OK

service network restart

安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
docker run hello-world

Docker镜像加速(使用阿里云的镜像地址)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxhsese.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker运行tomcat环境

下载tomcat7.0.75镜像
docker pull tomcat7.0.75
创建docker目录docker
进入到docker目录,创建Dockerfile文件,内容如下:

from tomcat:7.0.75
VOLUME /root/docker
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ./hello.war   /usr/local/tomcat/webapps

上传hello.war到docker目录
创建hello/tomcat 镜像

docker build -t tomcat/hello

运行tomcat镜像

docker run -d -p 8080:8080  tomcat/hello

进入tomcat镜像查看

docker  exec -it e90536690a34  /bin/bash

查看日志

docker logs -f -t  --tail=10 relaxed_hertz

Docker利用Tomcat和MySQL容器部署服务

拉取MySQL镜像

docker pull mysql

创建MySQL容器

docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

注:run -itd:在docker中运行一个带交互式的且能后台运行的容器。
–name mysql:给容器命名为mysql,注意name前面有两个小横杠,你也可以自己随意命名。
-p 3306:3306:这里是指将容器的3306端口映射到主机的3306端口,冒号前面指的是主机,后面指的是容器。
-e MY_ROOT_PASSWORD=123456:这行命令的意思是在创建mysql容器的时候在容器中创建一个root用户,密码是123456
进入MySql容器

docker exec -it mysql bash
mysql -u root -p

客户端连接MySQL

docker在线文档系统 docker实战文档_docker

查看容器中MySQL的地址

docker inspect mysql

docker在线文档系统 docker实战文档_实战_02

修改war上jdbc的地址,打包,剩下的操作见 【Docker运行tomcat环境】

Docker部署springboot

创建docker目录 docker
将springboot的jar包放入docker目录
进入docker目录创建Dockerfile文件

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD service-hi-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

创建镜像

docker build -t tomcat/hello

运行tomcat镜像

docker run -d -p 8080:8080  tomcat/hello

进入tomcat镜像查看

docker  exec -it e90536690a34  /bin/bash

查看日志

docker logs -f -t  --tail=10 relaxed_hertz

Docker命令介绍

查看镜像

docker images

删除镜像

docker rmi <images id>

停止容器

docker stop <contains id>

删除容器

docker rm <contains id>

查看日志

docker -f <contains id>

导出容器

docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2

标记容器

root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images   runoob/ubuntu:v3
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB

查看容器

docker ps -a

Dockerfiles文件参数介绍

FROM 指定基础镜像
RUN 执行命令
COPY 复制文件

Docker 实际操作

关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# firewall-cmd --state
not running
[root@localhost ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# vim  /etc/selinux/config

dockerfile创建

from tomcat:7.0.75
VOLUME /root/docker/ahfk
MAINTAINER *********@163.com
COPY ./server.xml /usr/local/tomcat/conf/
RUN rm -rf /usr/local/tomcat/webapps/*
RUN mkdir /usr/local/tomcat/jarsPath
RUN mkdir /usr/local/tomcat/security
COPY ./cas/*   /usr/local/tomcat/webapps/
RUN unzip /usr/local/tomcat/webapps/cas.zip -d /usr/local/tomcat/webapps
RUN echo 'Etc/CST' > /etc/timezone
RUN unzip /usr/local/tomcat/webapps/portal.zip -d /usr/local/tomcat/webapps
RUN unzip /usr/local/tomcat/webapps/security.zip -d /usr/local/tomcat/webapps

Docker创建一个包含多个tomcat的centos镜

关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# firewall-cmd --state
not running
[root@localhost ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# vim  /etc/selinux/config

Dockerfile文件创建

#插入以下内容
#使用的基础镜像
FROM centos:latest
#作者信息
MAINTAINER yzzhouyalei "yzzhouyalei@foxmail.com"
RUN echo 'Etc/CST' > /etc/timezone
#创建目录
RUN mkdir -p /root/java/jdk
#把当前目录下的jdk文件夹添加到镜像
ADD jdk /root/java/jdk
COPY ./run.sh /root/java/
RUN chmod u+x /root/java/run.sh
#创建tomcat目录
RUN mkdir -p /root/java/tomcat7
#把当前目录下的tomcat文件夹添加到镜像
ADD tomcat7 /root/java/tomcat7
RUN mkdir -p /root/java/tomcat7.0/jarsPath
ADD tomcat7.0 /root/java/tomcat7.0
RUN chmod u+x /root/java/tomcat7/bin/*
RUN chmod u+x /root/java/tomcat7.0/bin/*
RUN chmod u+x /root/java/jdk/bin/*
#添加环境变量
ENV JAVA_HOME /root/java/jdk
#ENV CATALINA_HOME /root/java/tomcat7
ENV PATH $PATH:$JAVA_HOME/bin:
#暴露8080端口
EXPOSE 8080
EXPOSE 8210
#启动时运行tomcat
#CMD ["/root/java/apache-tomcat-7.0.70/bin/catalina.sh","run"]
CMD ["/bin/sh", "/root/java/run.sh"]

run.sh 创建

#!/bin/bash
echo 'hello'
/root/java/tomcat7/bin/catalina.sh run &
/root/java/tomcat7.0/bin/catalina.sh run &
tail -f /dev/null   #Dockerfile运行完shell脚本后会自动关闭容器,这里给他设置容器不关闭
#echo 'hello'

创建镜像

docker build -t tomcat .

启动centos服务器以及tomcat服务

docker run -d -p 8080:8080 -p 8120:8120  tomcat:latest

查看日志

docker logs <cantain id >

在镜像启动之前进入容器

docker run -it <images id> /bin/bash

编辑完成容器后保存镜像

Docker commit <cantain id > <new images name>

在容器启动之后进入容器

docker  exec -it <cantain id >  /bin/bash

镜像内的东西与镜像外的服务器相互拷贝

docker cp /Users/howey/Documents/apache-maven-3.5.2/ 749056ea1637:/opt

docker cp 本地路径 容器Id或name:容器目录

docker cp 749056ea1637:/Users/howey/Documents/apache-maven-3.5.2 /opt/

docker cp 容器Id:本地路径 镜像路径

镜像导入导出

export命令导出的tar文件略小于save命令导出的
保存镜像

docker save -o nginx.tar nginx:latest
docker export -o nginx-test.tar nginx-test

导入镜像

docker load -i nginx.tar
docker import nginx-test.tar nginx:imp

export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操 作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp 是export导出import导入的。

查看历史镜像

docker history <images name >