一、Docker简介
1、简单说一下
Docker是一个开源的、性能非常好(好到毫秒级别)的、能给使用者带来极大方便的 应用容器引擎。
2、那,什么是应用容器引擎呢?
有好多应用软件,比如tomcat,比如mysql等等,我们拿到一台新的电脑,很干净,上面什么也没有,作为一个开发人员,你势必要把你需要的软件全都安装在你的新电脑上。在以前,那么多的软件,你需要一个一个去安装、去配置,浪费时间又浪费精力。现在呢,如果你使用Docker,那么这么多的工作都不需要你去做了,docker会帮你做好。
3、Docker功能
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,并将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像则称之为容器,容器的启动是非常快速的,类似Windows里面的ghost操作系统,安装好之后什么都有了。
4、Docker的核心概念:
Docker主机(Host):安装了docker程序的机器(Docker直接安装在操作系统之上)
Docker客户端(Client):客户端连接docker主机进行操作(可通过命令行或其他工具使用docker)
Docker仓库(Registry):用来保存各种打包好的软件镜像
Docker镜像(Images):软件打包好的镜像,放在Docker仓库中
Docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
二、使用Docker的步骤
1、安装Docker(以CentOS为例进行安装)
a、查看CentOS内核版本:(Docker要求CentOS系统内核版本需要高于或至少为3.10)
[root@app1 ~]# uname -r
3.10.0-693.2.2.el7.x86_64
b、若内核版本低于3.10则需要升级内核(选做)
[root@app1 ~]# yum update
这个命令执行时间较长,需要安装很多东西。耐心等待吧。
c、安装Docker
[root@app1 ~]# yum install docker
安装期间需要选择y进行确认安装。当出现“complete!”字样即安装成功。
d、启动Docker
[root@app1 ~]# systemctl start docker
[root@app1 ~]#
#查看docker版本号
[root@app1 ~]# docker -v
Docker version 1.13.1, build 07f3374/1.13.1
e、我们的机器有可能会经常手动关机或者有时候会异常关闭,当我们每次重启之后再去启动Docker可能会比较麻烦,我们可以设置其开机自启动。
[root@app1 ~] systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
f、停止Docker
[root@app1 ~]# systemctl stop docker
[root@app1 ~]#
2、镜像操作
a、搜索镜像:去Docker仓库找到这个软件对应的镜像(以tomcat为例)
[root@app1 ~]# docker search tomcat
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 2224 [OK]
docker.io docker.io/tomee Apache TomEE is an all-Apache Java EE cert... 59 [OK]
docker.io docker.io/dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 50 [OK]
docker.io docker.io/davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 31 [OK]
docker.io docker.io/bitnami/tomcat Bitnami Tomcat Docker Image 27 [OK]
docker.io docker.io/consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
docker.io docker.io/cloudesire/tomcat Tomcat server, 6/7/8 14 [OK]
docker.io docker.io/tutum/tomcat Base docker image to run a Tomcat applicat... 11
docker.io docker.io/meirwa/spring-boot-tomcat-mysql-app a sample spring-boot app using tomcat and ... 10 [OK]
docker.io docker.io/aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 9 [OK]
docker.io docker.io/jeanblanchard/tomcat Minimal Docker image with Apache Tomcat 8
docker.io docker.io/arm32v7/tomcat Apache Tomcat is an open source implementa... 6
docker.io docker.io/maluuba/tomcat7-java8 Tomcat7 with java8. 3
docker.io docker.io/rightctrl/tomcat CentOS , Oracle Java, tomcat application s... 3 [OK]
docker.io docker.io/amd64/tomcat Apache Tomcat is an open source implementa... 2
docker.io docker.io/arm64v8/tomcat Apache Tomcat is an open source implementa... 2
docker.io docker.io/fabric8/tomcat-8 Fabric8 Tomcat 8 Image 2 [OK]
docker.io docker.io/99taxis/tomcat7 Tomcat7 1 [OK]
docker.io docker.io/1and1internet/debian-9-java-8-tomcat-8.5 Our tomcat 8.5 image 0 [OK]
docker.io docker.io/cfje/tomcat-resource Tomcat Concourse Resource 0
docker.io docker.io/jelastic/tomcat An image of the Tomcat Java application se... 0
docker.io docker.io/oobsri/tomcat8 Testing CI Jobs with different names. 0
docker.io docker.io/picoded/tomcat7 tomcat7 with jre8 and MANAGER_USER / MANAG... 0 [OK]
docker.io docker.io/s390x/tomcat Apache Tomcat is an open source implementa... 0
docker.io docker.io/swisstopo/service-print-tomcat backend tomcat for service-print "the true... 0
其实此命令相当于从https://hub.docker.com(Docker Hub)下Search.
可以在此处看版本号,即TAGS
其中,name看io/后面的内容,description是镜像的描述,stars表示有多少千人正在关注,official表示该镜像是否是官方提供,automated表示该镜像是否是自动构建的,有[ok]的是自动构建,没有的需要我们自定义构建。
b、拉取镜像
[root@app1 ~] docker pull tomcat
等待其下载完成。这个命令下载的默认的tomcat,默认标签 latest。
当然也可以下载指定版本的软件镜像。
#指定版本的写法,以7-jre7-slim为例
[root@app1 ~] docker pull tomcat:7-jre7-slim
c、查看所有本地镜像
[root@app1 ]~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/tomcat 7-jre7-slim 016bbb6bd994 2 days ago 107.2 MB
docker.io/tomcat latest 108db0e7c85e 3 days ago 94.8 MB
d、删除指定的本地镜像
#docker rmi image-id
[root@app1 ]~ docker rmi 016bbb6bd994
3、容器操作:
使用Docker运行这个镜像,这个镜像就会生成一个Docker容器。对容器的启动、停止即对软件的启动或停止
a、运行容器
# docker run --name container-name -d image-name
# 其实这是错误的写法,后面会说到正确的写法
[root@app1 ~]# docker run --name mytomcat -d tomcat:latest
1235c491d49aa4428fcaf1a48986403af71a01f48bb3e9700f7871b0418f0a11
--name:自定义容器名
-d:后台运行
image-name:指定镜像模板
b、查看运行中的容器
[root@app1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1235c491d49a tomcat:latest "catalina.sh run" About a minute ago Up About a minute 8080/tcp mytomcat
#显示所有docker,包括已经停止的
[root@app1 ~]# docker ps -a
加上-a可以查看所有正在运行的容器。但现在的tomcat是不能使用的,得做端口映射,所以需要先停止、删除这个容器。
c、停止、启动当前运行中的容器
#停止
#docker stop container-name或者docker stop container-id
[root@app1 ~]# docker stop 1235c491d49a
1235c491d49a
#启动
[root@app1 ~]# docker start 1235c491d49a
1235c491d49a
e、删除指定容器
#删除docker容器
#docker rm container-id
[root@app1 ~]# docker rm 1235c491d49a
1235c491d49a
f、启动一个做了端口映射的tomcat
#重新启动一个带端口映射的tomcat容器 --name mytomcat也可以不指定
[root@app1 ~]# docker run --name mytomcat -d -p 8082:8080 tomcat
95c181142c3a98323158e3879f5a81085b5b46452f97287de60623f126178e30
将主机(linux)8082端口映射到容器的8080端口。配置好后即可使用IP:8082访问tomcat首页(需要关闭防火墙)。
h、容器日志
#docker logs container-name或container-id
[root@app1 ~]# docker logs 1235c491d49a
g、更多命令
https://docs.docker.com/engine/reference/commandline/docker/
三、扩展
安装mysql值得注意的地方:
docker run --name mysqldev -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
↑ mysql容器的启动:-p 3306:3306指定端口映射, -e MYSQL_ROOT_PASSWORD=123456,指定mysql的root用户的密码为123456。若不指定,mysql不能正常运行。
docker run --name mysql02 -p 3306:3306 -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:tag
↑ 把主机的/mysql/conf文件夹挂载到mysql docker容器的/etc/mysql/conf.d文件夹里面,以后修改mysql的配置文件只需要把mysql配置文件放在/mysql/conf文件夹下即可。
docker run -p 3307:3306 --name mysql03 -e MYSQL_ROOT_PASSWORD=123456 -d msyql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicaode_ci
↑ 设置一些参数,使mysql的编码为utf-8
四、结束
对Docker容器的启动、停止即对软件的启动、停止。
我们可以在一台服务器上生成多个容器,使用不同端口访问即可。