# docker

[TOC]
## docker概念
概念官网解释:[docker官网](https://www.docker.com/) 1. 开放平台
2. 容器技术
3. LXC(Linux Container)
### 组成
1. Docker Engine:运行平台,构建镜像(核心概念:Docker镜像 image,Docker容器 containers,docker Registry)

 2. Docker Registry:托管镜像的仓库
3. Docker Hub:托管存储和共享镜像
4. Docker Machine:构建容器运行环境的配置
5. Docker Compose:多容器应用管理
6. Docker Swarm:容器集群和调度管理工具
7. Kitematic:桌面GUI管理程序(测试过Windows,体验还行)
8. Docker Toolbox(替代Boot2Docker)
9. Docker Trusted Registry(DTR)
10. Docker Subscription ### 架构

### 生态
---
## docker命令
---
## docker 网络(略) ```
ip link add veth-a type veth peer name veth-b
ip a |grep veth
brctl addif br0 veth-a
ip link set veth-a up
ip link set veth-b netns test1 ...
```
---
## 实战
### 安装
centos
```
yum install docker
```
ubuntu
```
apt install docker.io
```
启动
```
service docker start 或者
systemctl start docker.service
```
设置开机启动
```
chkconfig docker on
或者
systemctl enable docker.service
```
### docker 命令
#### 查看
```
docker info
```

#### run
-i(stdin) -t(stdout) -d(后台运行) --rm (执行exit命令后就会退出删除容器,相当于运行一个临时的容器)
```
docker run -it centos /bin/bash docker run --name haha -it centos /bin/bash
docker start haha
docker ps

#附着
docker attach haha
#解附着,后台运行
ctrl+P+Q
#执行shell脚本“while”循环 
docker run --name daemon_haha -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done"
#查看日志:-t加时间戳-f监控
docker logs -t -F daemon_haha docker logs --tail 2 -t daemon_haha
# 查看容器对应宿主机的目录对应
container id cd /var/lib/docker/containers docker ps -a
##到对应的容器id目录下即可查看日志文件
``` 
docker top daemon_haha 
```
#### exec (开启交互模式)
``` docker exec -i -t daemon_haha /bin/bash docker ps
# 退出还会在后台运行,相当于只是将/bin/bash进程退出而已 exit docker ps
#存在创建的txt文件
```
docker exec -d daemon_haha touch /etc/docker.txt docker exec -it daemon_haha /bin/bash ll /etc/ 
```
#### ps(查看正在运行的容器) -a(包括停止的容器)
```
docker ps -l docker ps -a docker ps -n 2
```
#### stop(停止后台运行) ``` docker stop daemon_haha docker ps docker start daemon_haha docker ps ```
#### kill(不建议) ``` docker kill daemon_haha ```
#### inspect(查看容器信息) ```
#看容器的属性,hostnamepath主机名的路径,容器的id,镜像的id docker inspect daemon_haha docker inspect --format='{{.State.Running}}' daemon_haha ```
#### rm(删除容器) ``` docker rm haha docker ps -a -q docker rm `docker ps -a -q` docker rm -f `docker ps -a -q`
#正在运行的需要停止或者强制删除-f docker rm -f `docker ps -a -q`
#或者 docker rm -f $(docker ps -a |awk '{print $1}') ```
#### save(保存) ``` docker save [images_tag]> test.tar ```
#### load(导入) ``` docker load test.tar ```
#### export(备份) ``` docker ps -a docker export [docker id] > my_container.tar cat my_container.tar | docker import - container:test docker images docker run -it container:test /bin/bash ```
#### import docker import [container_name]
#### search ``` docker search centos ```
#### commit ``` docker commit [container id ] haha/test ``` ---
#### build docker build从客户端传输到docker守护进程,构建是在守护进程里面进行的 Dockerfile所在的目录就是构建目录,将文件发给守护进程
``` Dockerfile FROM centos MAINTAINER ruofei RUN mkdir /usr/local/test EXPOSE 80 ```
``` docker build --no-cache -t="haha/no-cache". docker images docker build -t "haha/use-cache" . ```
#### history 查看镜像构建过程 ``` docker history haha/use-cache ```
### Dockerfile
#####ENV 环境变量的设置,设置完,启动容器后使用env命令查看: ``` env
#输出例子 HOSTNAME=b123876429ce OLDPWD=/opt/spark-1.6.0-bin-hadoop2.6/bin PYTHON_VERSION=2.7.5 ```
也可以使用docker -e “<key>:<value>”传入环境变量
##### WORKDIR 工作目录,类似cd命令去到工作的目录下面
##### CMD & ENTRYPOINT CMD:容器运行时指定运行命令,可被用户覆盖;ENTRYPOINT:容器启动时指定默认运行命令,不可被用户指定参数被覆盖,多个ENTRYPOINT,最后一个成立。
##### ARG 指定参数让用户docker build --build-arg 将参数传入
``` 如果ARG指定了一个默认值并且在构建期间没有传递值过去,那么就使用默认值。 ARG变量定义从在Dockerfile定义的行生效,而不是从在命令行参数的使用或其它地方。 ```
``` FROM busybox USER ${user:-some_user} ARG user USER $user ... ```
使用如下命令构建: ``` docker build --build-arg user=haha_user -f path_Dockerfile ``` ps:第一个传入的user值为-some_user,后面被用户传入的haha_user覆盖了。注意不要传入秘钥等隐私数据,因为可以通过docker history查看
### 集群
#### web
1. (1)先构建JDK镜像 在当前目录(/root/jdk) ```Dockerfile FROM centos MAINTAINER StephenLu ADD jdk-7u75-linux-x64.tar.gz /usr/local RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV JRE_HOME /usr/java/jdk1.7/jre ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar :$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH ```
(2)将JDK拷贝过来当前目录 ``` cp ../jdk-7u75-linux-x64.tar.gz . ```
(3)创建镜像 ``` docker build –t=”hadoop/jdk” . docker run --rm -it [image_id] ls /usr/local ```
2. Dockerfile
``` FROM hadoop/jdk MAINTAINER StephenLu ADD appache-tomcat-7.0.62.tar.gz /usr/local WORKDIR /usr/local RUN mv apache-tomcat-7.0.62 tomcat7 WORKDIR /usr/local/tomcat7/bin EXPOSE 8080 ```
(2) ``` docker run --rm -ti 0a2fb0c55cea ```
(3) ``` docker run --rm -P -it 0a2fb0c55cea /bin/bash ./startup.sh
#测试 docker ps curl -XGET '192.168.66.217:007'
# ./startup.sh在后台运行,docker以为容器内没运行进程就停调了 docker run –d –P hadop/tocat ./startup.sh
# 使用调试模式启动tomcat docker run –d –P hadoop/tomcat ./catalina.sh run docker ps -l
# 动态指定volume docker run -d -P -v /usr/local/yf_test:/usr/local/tomcat7/webapp -p 8080:8080 hadoop/tomcat ./catalina.sh run docker ps
# 页面访问 ip:port/haha/a.txt ``` #### Redis 1.单机 Dockerfile ``` ```
2.集群 #### spark #### hadoop #### tensorflow 使用docker-compose 0.安装docker-compose ``` pip install docker-compose ```
1.创建yml文件docker-compose.yml ``` version: '2' services: jupyter: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "8888:8888" volumes: - "/tmp/tensorflow_logs" - "./notebooks:/root/notebooks" command: - "/run_jupyter.sh" - "/root/notebooks" tensorboard: image: registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow:1.0.0 ports: - "6006:6006" volumes_from: - jupyter command: - "tensorboard" - "--logdir" - "/tmp/tensorflow_logs" - "--host" - "0.0.0.0" ```
2.启动运行环境 ``` docker-compose up -d ```
3.检查 ``` docker-compose ps ```
4.使用环境 http://127.0.0.1:8888/tree
获取镜像 ``` docker pull floydhub/dl-docker:cpu
``` 运行 ``` docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu jupyter notebook (docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu tensorboard --logdir /tmp/tensorflow_logs --host 0.0.0.0)
#检查,浏览器登录0.0.0.0:8888,查看jupyter notbook;0.0.0.0:6006,查看tensorbo docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash ```
查看版本
``` import tensorflow as tf import keras tf.__version__
#0.8.0 print keras.__version__
#1.0.3 th.__version__
#0.8.2 caffe.__version__
#'1.0.0-rc3'

2018.5.3 docker的更多相关文章

  1. 容器化-Docker介绍

    导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...

  2. [转]Docker中的镜像

    引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的M ...

  3. Docker搭建PXC集群

    如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...

  4. Docker、kubernetes、微服务、SpringBoot/Cloud...好乱!到底要不要学?

    Docker.微服务日益火热的今天,相信标题上这些名词大家都不陌生.但也相信有很多同学并不够清楚他们的概念,不理解它们的关系,也可能有这样的疑惑:不知道跟我有没有关系?要不要学习?怎么去学习?学哪些东 ...

  5. Docker | 第七章:Docker Compose服务编排介绍及使用

    前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件.大多都是一个镜像启动.当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也 ...

  6. Docker | 第六章:构建私有仓库

    前言 上一章节,讲解了利用Dockerfile和commit进行自定义镜像的构建.大部分时候,公司运维或者实施部门在构建了符合公司业务的镜像环境后,一般上不会上传到公共资源库的.这就需要自己搭建一个私 ...

  7. Docker | 第四章:Dockerfile简单介绍及使用

    前言 前一章节,介绍了Docker常用的命令.在基本使用上,熟悉这些常用的命令基本上就够了.但在一些场景下,比如在部署SpringBoot应用时,通常我们都是打成Jar包,然后利用java命令进行运行 ...

  8. Docker | 第三章:Docker常用命令

    前言 上一章节,简单介绍了在CentOS下的Docker的安装过程,以及运行了一个官方提供的Hello,World镜像运行了第一个Docker.就像上一章中,验证Docker是否安装成功,我们执行的是 ...

  9. Docker | 第二章:第一个Docker应用

    前言 上一章节,已经简单讲解了Docker相关方面的知识,相信大家已经有个概念了.这章节开始,开始进行实践操作.和学习任何一门语言一样,我们今天也开始从Hello,World开始~ 对Docker不了 ...

随机推荐

  1. 用工具metaseeker写简单爬虫(1)

    1.下载metaseeker(一款比较实用的网站数据采集程序) 2.将所要爬取的网页复制到网址里,按回车.我选择的是当当网新书排行榜页面,标2的地方表示已经导入到软件里了. 3.命名主题,查重,查看是 ...

  2. js操作对象

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. OO第四次作业总结

    一:测试与正确性论证的效果差异 首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论. 测试:测试首先是构造一组测试样例,之后将程 ...

  4. 如何将Team Viewer 从商务版重新安装成个人/非商务版 变成免费版本

    问题分析: 由于安装时选择如何使用 Team Viewer13 时,选择商务用途,则其为非免费的,只能试用一段时间,后面想要转成个人/非商务用途,则不行,因为 其安装时绑定了该电脑的 MAC地址(网卡 ...

  5. generator mybatis逆向工程

    mybatis逆向工程:根据数据库中的表在项目中生成对应的 实体类,dao接口与mapper.xml映射文件 在eclipse中,以插件的形式的存在,把设置好的配置文件,直接通过eclipse中的插件 ...

  6. 简单的OO ALV小示例

    OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV.它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕. 示例展示: 1. 进入实用 ...

  7. 关于windows映射网络驱动器,登录时重新连接

    如果想登录系统后映射盘符还在,但是不自动连接,则参考下面方法.方法其实很简单,关键的步骤是:登录共享的时候,登录界面取消选中“保存凭据”,然后映射的时候,选择“下次开机是重新连接” 这样,下次开机的时 ...

  8. 无线局域网(WLAN)

    无线局域网根据结构可以分为两大类:有固定基础设施的无线局域网和无固定基础设施的局域网. 有固定基础设施是指网络中已经预先存在了一批固定的数据处理和转发设备,这些固定设备可以通过有线方式连接其他网络或 ...

  9. input ,button, textarea 1)使用disabled , 2) 显示值, 3) 表单提交. 4) jquery.form.js ajaxSubmit() 无刷新ajax提交表单.

    1.使用disabled input , button  textarea 可以 被 禁用, 禁用的效果 : 1) 上面的点击事件无法使用 --- button       : 下面的 onclick ...

  10. C++入门程序作业3

    /* 输出n位数据的格雷码 The gray code is a binary numeral system where two successive values differ in only on ...