[关闭]
@JunQiu 2018-11-04T11:30:25.000000Z 字数 8051 阅读 1049

lodash、docker_进入容器方式简介,service,swarm,stack

summary_2018/06 npm docker


1、日常工作

2、技术学习
  1. # Use an official Python runtime as a parent image
  2. FROM python:2.7-slim
  3. # Set the working directory to /app
  4. WORKDIR /app
  5. # Copy the current directory contents into the container at /app
  6. ADD . /app
  7. # Install any needed packages specified in requirements.txt
  8. RUN pip install --trusted-host pypi.python.org -r requirements.txt
  9. # Make port 80 available to the world outside this container
  10. EXPOSE 80
  11. # Define environment variable
  12. ENV NAME World
  13. # Run app.py when the container launches
  14. CMD ["python", "app.py"]
  15. Tips:
  16. 1RUN命令与CMD命令的区别在哪里?简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入image文件;CMD命令则是在容器启动后执行。另外,一个Dockerfile可以包含多个RUN命令,但是只能有一个CMD命令。
  17. Tip:注意,指定了CMD命令以后,docker container run命令就不能附加命令,否则它会覆盖CMD命令。
  18. 2ENV 在实际commit不要固定,生成的时候进行配置
  1. from flask import Flask
  2. from redis import Redis, RedisError
  3. import os
  4. import socket
  5. # Connect to Redis
  6. redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
  7. app = Flask(__name__)
  8. @app.route("/")
  9. def hello():
  10. try:
  11. visits = redis.incr("counter")
  12. except RedisError:
  13. visits = "<i>cannot connect to Redis, counter disabled</i>"
  14. html = "<h3>Hello {name}!</h3>" \
  15. "<b>Hostname:</b> {hostname}<br/>" \
  16. "<b>Visits:</b> {visits}"
  17. return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
  18. if __name__ == "__main__":
  19. app.run(host='0.0.0.0', port=80)
  1. Flask
  2. Redis
  1. $ ls
  2. Dockerfile app.py requirements.txt
  3. docker build -t friendlyhello .
  4. //-t参数用来指定image文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile文件所在的路径,上例是当前路径,所以是一个点。
  5. Tips:生成Image时会生成一些程序依赖文件,使用dockerignore文件可以避免将依赖文件包含到image
  1. tag命令(为本地的 image 标注用户名和版):
  2. //标准(可以生成的时候直接设定)
  3. $ docker image tag [imageName] [username]/[repository]:[tag]
  4. # login
  5. docker login urloptioal:自己的库地址,默认Docker Hub
  6. docker push username/repository:tag
  7. repository:REPOSITORY tagTAG(版本/标签)
  1. docker run -p 4000:80 friendlyhello //本地或从仓库拉取
  2. //将该容器的端口80映射到4000
  3. 参数说明:
  4. docker container run -p 8000:3000 -it demo:0.0.1 /bin/bash
  5. -p参数:容器的 3000 端口映射到本机的 8000 端口。
  6. -it参数:容器的Shell映射到当前的Shell,然后你在本机窗口输入的命令,就会传入容器。
  7. demo:0.0.1image文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  8. /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用Shell。(这个可以直接写在dockerfile中,CMD node demos/01.js,它表示容器启动后自动执行node demos/01.js
  1. ## 什么是服务???
  2. 在分布式应用程序中,应用程序的不同部分称为“服务”。例如,如果您想象一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个用于在后台进行视频转码的服务。用户上传内容,前端服务等。
  3. 服务实际上只是“生产中的容器”。服务只运行一个映像,但它编码了映像的运行方式-它应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,以及等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
  4. ## docker中的service
  5. 一个docker-compose.yml文件是一个YAML文件,它定义了如何Docker容器在生产中应表现
  6. version: "3"
  7. services:
  8. web:
  9. # replace username/repo:tag with your name and image details
  10. image: username/repo:tag
  11. deploy:
  12. replicas: 5
  13. resources:
  14. limits:
  15. cpus: "0.1"
  16. memory: 50M
  17. restart_policy:
  18. condition: on-failure
  19. ports:
  20. - "80:80"
  21. networks:
  22. - webnet
  23. networks:
  24. webnet:
  25. docker-compose.yml文件告诉Docker执行以下操作:
  26. Pull the image from the registry.
  27. 将该映像的5个实例作为一个被调用的服务运行web,限制每个实例使用,最多10%的CPU(跨所有内核)和50MBRAM
  28. 如果失败,立即重启容器。
  29. Map port 80 on the host to webs port 80.
  30. webnet使用默认设置(负载平衡的覆盖网络)定义网络。
  31. // stack是swarm上的概念
  32. docker swarm init
  33. //run app,set name getstartedlab
  34. docker stack deploy -c docker-compose.yml getstartedlab
  35. // Scale the app(拓展),update docker-compose.yml,run
  36. docker stack deploy -c docker-compose.yml getstartedlab
  37. TipsDocker将进行就地更新,无需首先拆除堆栈或杀死任何容器。放大,会直接增加,减少会杀死容器。
  38. // Take the app down with docker stack rm:
  39. docker stack rm getstartedlab
  40. // Take down the swarm.
  41. docker swarm leave --force
  42. //docker ps :查看运行的实例
  1. 群集是一组运行Docker并加入群集的计算机。加入群组后,它们被称为节点。
  2. Swarm管理器可以使用多种策略来运行容器,例如“emptiest node - 它使用利用率最低的机器。
  3. 群集管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入群集。工人只是在那里提供能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。
  4. //初始化当前机器为集群管理器
  5. docker swarm init
  6. //比如我们在上面service中的使用(只有一个节点的集群),更多见原文。。。。
  1. //栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起。
  2. //添加服务通过修改docker-compose.yml,并配置swarm如何调度容器
  3. version: "3"
  4. services:
  5. web:
  6. # replace username/repo:tag with your name and image details
  7. image: username/repo:tag
  8. deploy:
  9. replicas: 5
  10. restart_policy:
  11. condition: on-failure
  12. resources:
  13. limits:
  14. cpus: "0.1"
  15. memory: 50M
  16. ports:
  17. - "80:80"
  18. networks:
  19. - webnet
  20. visualizer: //添加一个可视化服务
  21. image: dockersamples/visualizer:stable
  22. ports:
  23. - "8080:8080"
  24. volumes:
  25. - "/var/run/docker.sock:/var/run/docker.sock"
  26. deploy:
  27. placement:
  28. constraints: [node.role == manager]
  29. networks:
  30. - webnet
  31. networks:
  32. webnet:
  1. ## 一些常见的命令:
  2. docker --version
  3. docker build -t friendlyname . # Create image using this directory's Dockerfile
  4. docker run -p 4000:80 friendlyname # Run "friendlyname" mapping port 4000 to 80
  5. docker run -d -p 4000:80 friendlyname # Same thing, but in detached mode
  6. docker container ls # List all running containers
  7. docker container ls -a # List all containers, even those not running
  8. docker container stop <hash> # Gracefully stop the specified container
  9. docker container kill <hash> # Force shutdown of the specified container
  10. docker container rm <hash> # Remove specified container from this machine
  11. docker container start <hash> # start container
  12. docker container rm $(docker container ls -a -q) # Remove all containers
  13. docker image ls -a # List all images on this machine
  14. docker inspect <hash> # 查看image的内容
  15. docker image rm <image id> # Remove specified image from this machine
  16. docker image rm $(docker image ls -a -q) # Remove all images from this machine
  17. docker login # Log in this CLI session using your Docker credentials
  18. docker tag <image> username/repository:tag # Tag <image> for upload to registry
  19. docker push username/repository:tag # Upload tagged image to registry
  20. docker run username/repository:tag # Run image from a registry
  21. docker stack ls # List stacks or apps
  22. docker stack deploy -c <composefile> <appname> # Run the specified Compose file
  23. docker service ls # List running services associated with an app
  24. docker service ps <service> # List tasks associated with an app
  25. docker inspect <task or container> # Inspect task or container
  26. docker container ls -q # List container IDs
  27. docker stack rm <appname> # Tear down an application
  28. docker swarm leave --force # Take down a single node swarm from the manager
  29. // docker进入容器的几种方式
  30. 1docker attach
  31. docker attach 44fc0f0582d9(多个窗口会同步/阻塞)
  32. 2nsenter(需要安装)
  33. 3ssh(需要安装)
  34. 4docker execV1.3.X,推荐)
  35. docker exec -it 775c7c9ee1e1 /bin/bash
  36. // 当前默认镜像:Ubuntu

3、思考与总结

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注