docker
关于docker的介绍以及初级使用 在各个网上都能搜到了
记录一下个人的使用了两天后的感受
首先可以去看看知乎的评价 以及知乎上说的关于docker的使用场景
目前还是没有感觉出和server 虚拟机的差别, 很明显的就是 它能直接通过内部命令去搜和下载以及安装运行,而虚拟机需要去找找找
因为本身我的host也是linux而且还是基于ubuntu的mint,所以我看到很多应用 感觉都直接可以安装,从这一点上说对个人用户没有看出特别的优点
目前所想到的优点,以及搜索到的一些repo:如果本身使用的不是debian系列的linux 甚至是windows,那么有一个docker能快速部署和支持想想也是很棒的,当然现在windows 也推出了ubuntu on windows
个人每次换新电脑的时候 还是要配本地环境,感觉优势不明显,但比如一些常用的需要配置的仓库,别人已经搭好了就能直接pull
还没学会如何精简的使用docker+github 来作为个人性质的使用
_(:з」∠)_
或者这种姿势本身就是不正确的?以及 它和虚拟机相比 可以说把 整个系统当做一个仓库来管理,因此 可以更快”建立”虚拟机 用来运行一些需要隔离的程序
架构
https://docs.docker.com/engine/faq/
常用
docker pull
docker build
docker push
docker run
run
--rm
运行后删除自己,可以把数据类映射到宿主机上,运行的container只是当作个程序
--env
运行环境参数
但凡会输入--help
命令就能看到-d
是 -d, --detach Run container in background and print container ID
还有一堆人非要说是daemon
--link <container name or id>:<alias name>
# https://www.jianshu.com/p/21d66ca6115e
权限
方案1 sudo启动
方案2 创建docker用户组
1 | sudo groupadd docker #添加docker用户组 |
运行
1 | docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像TD或镜像名:TAG |
映射:冒号左侧宿主
或docker提供
,右侧docker内部
创建
流程
docker hub 仓库,拉取到本地images
images 生成可运行的container
container 执行具体任务
docker image inspect <image name>
看配置
多个docker 之间配置 一次使用
docker-compose.yml
文件 + 相关配置文件
1 | # 启动所有服务 |
Dockerfile 创建image Demo
index.js
1 | var os = require("os"); |
Dockerfile
1 | FROM alpine |
docker image build -t hello:v0.1 .
相关命令
- 基础镜像(父镜像)信息指令 FROM。
- 维护者信息指令 MAINTAINER。
- 镜像操作指令 RUN 、EVN 、ADD、 WORKDIR、EXPOSE 等。
COPY 从宿主到内部 - 容器启动指令 CMD 、ENTRYPOINT 和 USER 等。
CMD 内部执行的命令 推荐上面数组格式
ENTRYPOINT 可以让你的容器表现得像一个可执行程序一样。
使用多个container (swarm mode)
Docker Compose and Docker Swarm Mode
Compose用于控制单个系统上的多个容器。 就像我们用来构建映像的Dockerfile一样,有一个文本文件描述了应用程序:要使用的映像,多少实例,网络连接等。但是Compose仅在单个系统上运行,因此虽然有用 ,我们将跳过Compose1并直接进入Docker Swarm Mode。
Swarm Mode 告诉Docker您将运行许多Docker引擎,并且您希望协调所有引擎。 Swarm模式结合了以下功能:不仅可以定义应用程序体系结构(例如Compose),而且可以定义和维护高可用性级别,扩展,负载平衡等。 通过所有这些功能,Swarm模式在生产环境中的使用频率要比其简单的表亲Compose更高。
https://training.play-with-docker.com/ops-s1-swarm-intro/
常用
这些并不会随着container消失而清理,可能需要手动rm,
docker network ls
管理网络配置
docker volume ls
储存
安全
对于宿主机器的权限https://training.play-with-docker.com/security-seccomp
常用 cheat sheet
功能 | 命令 |
---|---|
比较container和images本身的区别 | docker container diff <container_id> |
基于container创建image | docker container commit <container_id> |
命名image的repo | docker image tag <image_id> <image_repository> |
基于dockerfile创建image | docker image build -t <image_repository> . |
导出容器 | docker export <container_id> > xxx.tar |
导入容器 | cat xxx.tar <管道符号> docker import - <repository>:<tag> |
标准输出日志查看 | docker logs -f <container_id> / docker container logs <container_id> |
进入正在运行的容器(不建议经常操作,如果经常改,应该映射出来) | docker container exec -it <container_id> /bin/bash |
发布到远端
登录
docker login
产生image
docker image build -t [username]/[repository]:[tag] .
推送
docker image push [username]/[repository]:[tag]
磁盘体积过大
比如我的一个128ssd+1t普通的电脑,分区大概是/
,/home
,/data
, 然后这个玩意占了8g多/
,忍不了
很多办法 https://github.com/moby/moby/issues/3127 , 官网是建议
/etc/docker/daemon.json
1 | { |
记得先停再操作