docker学习笔记-day02:常用命令使用和利用docker commit生成镜像
作业练习,可视化,docker镜像讲解
作业练习
作业1:安装nginx
# 安装Nginx
$ docker pull nginx
$ docker run --name nginx01 -d -p 3344:80 nginx # 映射容器的80端口到主机的3344
12cefa90bd661891c3b4d95443e30f147c2f77ddbf0974f5e5e8ac8bd0461796
$ curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
$ docker exec -it nginx01 /bin/bash # 进入容器
$ whereis nginx # 查看nginx在容器的位置
容器内端口和宿主机端口
思考问题:每次修改nginx配置文件,都需要进入容器,十分麻烦,可以在容器外建立一个映射,达到在容器外修改文件,容器内部就跟着修改? -v 参数,数据卷的概念,后期学习
作业2:安装tomcat
# 官方的使用说明
$ docker run -it --rm tomcat:9.0 # --rm 用完就删除
$ docker run -it -p 3355:8080 --name tomcat02 tomcat:9.0 # 映射容器的8080到宿主机的3355端口
# 测试访问,没有内容
$ docker exec -it tomcat02 /bin/bash # 进入容器
root@69afb093995d:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@69afb093995d:/usr/local/tomcat# cd webapps/ # 这个目录里没有东西
# 发现webapps下没有内容,表示tomcat中没有启动任何应用
root@69afb093995d:/usr/local/tomcat# cp -r webapps.dist/* webapps # 将一些应用放到webapps目录下
# 这样做是保证最小的可运行环境
作业3:部署es + kibana
# es 暴露的端口太多,十分耗内存,es的数据一般要放置在安全目录,需要挂载
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # -e 集群模式设置为单机模式
$ curl localhost:9200 # 查看启动成功
{
"name" : "588f0be5389e",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "E7MPU5ABRhe32ghbINhGVA",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
# 启动后很卡
$ docker stats # 查看docker启动的容器在宿主机的占用情况
...
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
588f0be5389e elasticsearch01 0.98% 1.237GiB / 1.945GiB 63.60% 1.75kB / 984B 0B / 0B 43
...
# 会一直刷新内容 Ctrl + Z 停止,es占用内存1.2G
很卡,修改启动参数,-e 参数配置
$ docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
ed776cb8fc648d7300cb87a9f969c879314c80fd218af5a4b43a310747517e3d # 已启动es容器
$ docker stats

可以看到占用的内存在300m左右,已经限制了启动占用的内存大小(-e ES_JAVA_OPTS="-Xms64m -Xmx512m"配置参数的作用)
自己思考作业:使用kibana连接es,思考如何才能连接
kibana和es在两个容器中,是不能直接访问的,需要通过宿主机连接,这涉及到docker的网络原理

可视化
什么portainer
先用这个可视化工具,还有Rancher(CI/CD的时候再用)
docker的图形化管理工具,提供后台面板供我们操作。
安装命令:
$ docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# --restart 启动方式
# -v 挂载数据
# --privileged=true 授予权限
测试,localhost:8088,平时不怎么会用
镜像讲解




如何得到镜像?
- 从远程仓库下载
- 从其他地方复制
- 自己打包
commit镜像
# 和git差不多
docker commit -m="提交的信息" -a="作者" 容器ID 目标镜像名:[TAG]
# 测试,利用刚才能访问应用的tomcat:localhost:3355
docker commit -m="有应用的tomcat" -a="Nickel" 69afb093995d mytomcat9:1.0 # 提交一个新的镜像
到此为止,才算入门docker
Dockfile,容器数据卷,Docker网络这些才是docker的精髓。
2020-09-05 10:25:52



浙公网安备 33010602011771号