Fork me on GitHub

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,平时不怎么会用

镜像讲解




如何得到镜像?

  1. 从远程仓库下载
  2. 从其他地方复制
  3. 自己打包

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

posted @ 2020-09-05 10:26  Catalinas  阅读(228)  评论(0)    收藏  举报