Docker-note 从入门到

docker

docker概念

概念官网解释:docker官网

  1. 开放平台
  2. 容器技术
  3. LXC(Linux Container)

组成

  1. Docker Engine:运行平台,构建镜像(核心概念:Docker镜像 image,Docker容器 containers,docker Registry)
    Docker容器
  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-egine架构图

生态


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
#执行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
docker run --rm -ti --entrypoint=/bin/sh d657e505ecc6 /entry/entry-point.sh
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
cp(拷贝)
#注意是增量拷贝,SRC/test(a,c更新的文件) CONTAINER/test(a,b,c原有的文件)
#最后的结果是更新a,c的内容,b不会删除!
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
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]

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
pull

从docker registry镜像仓库拉取镜像

#不填仓库名,默认为dockerhub上面拉取
docker pull <registry_name>/<image_name>
push

将本地镜像上传到docker仓库

docker push <registry_name>/<image_name>

注意:
上传自己的镜像被拒绝denied: requested access to the resource is denied
原因是没有docker login <私有仓库名> ;解决办法:使用有运维权限的账号

docker login <私有仓库名> -u <user_name> -p <password>

Dockerfile

ENV

环境变量的设置,设置完,启动容器后使用env命令查看:

env

#输出例子
HOSTNAME=b123876429ce
OLDPWD=/opt/spark-1.6.0-bin-hadoop2.6/bin
PYTHON_VERSION=2.7.5

也可以使用docker -e “:”传入环境变量

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)

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 
## -p format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
## -v, --volume=[host-src:]container-dest[:<options>]: Bind mount a volume.The comma-delimited `options` are [rw|ro], [z|Z],[[r]shared|[r]slave|[r]private], and [nocopy].The 'host-src' is an absolute path or a name value. 
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.08888,查看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'


特别感谢大神工程师们的博客带我入门

参考

1.10张图带你深入理解Docker容器和镜像,2015
2.docker官网
3.基于Docker的Tensorflow实验环境-博客-云栖社区-阿里云
4.Ubuntu16.04安装Docker1.12+开发实例+hello world+web应用容器
5.包含深度学习常用框架的Docker环境,2016
6.http://tshare365.com/archives/2077.html
7.github:dl-docke
8.Docker+Jenkins_自动化持续集成
9.Dockerfile参考(15) – ARG指令定义由用户在命令行赋值的变量
10.Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值