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是干嘛的—部署优势
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展
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
查看容器中MySQL的地址
docker inspect mysql
修改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 >