1.使用镜像
既然你看到这篇文章,相信已经对docker有了初步的了解,这是一片docker快速使用的文章。其实docker跟maven似的,一个管理的是组织好的运行环境,一个是jar包。
1.1 下载镜像
docker pull hub.c.163.com/library/tomcat:latest
PS:这里使用了网易的docker镜像,下载速度
1.2 查看镜像
docker images
效果
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/library/tomcat latest 72d2be374029 12 months ago 292MB
1.3 新建容器
docker run -d -p 8888:8080 hub.c.163.com/library/tomcat
-d表示后台运行 -p表示端口映射 这个tomcat镜像默认端口是8080,前面的8888表示本季8888端口来映射到这个镜像的8080端口。
效果
因为用后台模式启动的-d ,所以会返回一个容器的id
可以在浏览器中输入
localhost:8888 查看tomcat起来了吗
注意: 每个容器环境都是独立,如果使用mysql这种有存储数据功能的镜像,一定在启动的时候使用 -v 宿主机目录/容器数据目录 指定数据目录和容器数据目录,让数据实时和宿主机同步,下次在启动时指定目录,才能把历史数据保存下来。
1.4 启动容器
注意上面的run其实是新建并启动一个容器的命令。run命令可以增加一个-name指定容器的名字。
如果后续在执行run,会提示该容器已经存在。因此这时候要用start命令。
docker start 容器名字
run的参数就不在需要了。
1.4 查看正在运行的容器
docker ps
docker ps -a 查看全部容器
1.5 查看容器 运行环境
镜像启动后,我们肯定有查看日志的需求,可以使用下面的命令进入查看
docker exec -it (容器id) bash
1.6 关闭容器
通过ps可以获取到在运行的实例
docker stop (容器id,不用输入全部id,只输入能区别开不同容器的前面几位id就行)
docker stop $(docker ps -a -q)
关闭所有容器
1.7删除容器
docker rm (容器id)
1.8删除镜像
docker rmi (镜像名字)
1.9 使用mysql容器举例
mysql一般用163的镜像即可。注意mysql的数据要挂载到本地,否则重启后就消息
新建命令
docker run --name="mysql5.7" -d -p 3306:3306 -v [本地文件夹]:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 hub.c.163.com/library/mysql:5.7
再次启动时
docker start mysql5.7
注意,老版本的docker的run方法,可以重复run同一个name的容器,后续就不能了。
2.构建镜像
掌握上面的命令就能轻松使用docker启动别人的镜像了。
但重要的是,我们需要构建自己的镜像,网上有很多构建基于tomcat的web应用,我这里以可执行jar包为例,构建一个java应用镜像。我这写了一个helloworld程序,并打成可执行jar
2.1准备镜像所需要的文件
hello.jar因为我这想展示更多命令,所以新建了一个文件夹
hello里面有一个bin文件夹,在里面放着hello.jar
如下图所示
2.2 编写dockerfile
from java:9
add hello.tar.gz /opt/
workdir /opt/hello/bin/
ENTRYPOINT ["java","-jar","hello.jar"]
下面解释dockerfile的语法,超级简单,就是key-value模式
2.2.1 from
from表示你的镜像是基于哪个镜像,如果是你是tomat web应用,from的值就是对应的tomcat的镜像名字:版本号
我们是java应用,就是基于Java:9
2.2.2 maintaine
镜像作者信息 可以省略
2.2.3 add/copy
制作镜像肯定需要外部文件
add和copy就能将dockerfie同级的文件复制系统的根目录 /下
add和copy的区别就是 add可以将压缩文件直接解压放到对应的目录下
2.2.4 run
run表示 构建根据我们的dockerfile构建 镜像执行的命令
但是一条run的作用范围只是这条命令,例如你切换到一个文件夹,后面的命令都是的目录并不会影响
2.2.5 workdir
切换命令 跟linux的cd 作用一样,使用该命令后 镜像的当前目录就进行了切换
2.2.6 entrypoint/cmd
启动镜像时,镜像内部会执行的命令,如果写了多条entrypoint/cmd只会最后一条生效。
推荐使用entrypoint的["",""] JSONArray模式
2.2.7 expose
暴露端口号命令,对于需要暴露端口号的镜像,使用该命令制定
2.3 构建镜像
docker build -t 镜像名字:版本号 .
最后最后有一个 .
写在最后:这是一篇快速上手应用docker的文章,并没有讲其相关概念,docker上手很快的,但跟详细的应用需要各位自己琢磨了。