技术

Scala shell内建指令 scala 最佳实践 centos 下安装sqlplus git简介及使用 Commands to Check Weblogic Server Status Spring 中 cache 的使用 pl/sql developer 相关问题 maven 用法 nexus docker 指南 oracle 相关问题 vim 快捷方式 media wiki 的搭建 安装 Kubernetes 如何的在centos中安装docker Hbase学习 hbase 异常解决 Docker 链接容器 dockerfile 最佳实践 centos 7 网卡配置 docker 学习笔记 guava 用法分享 docker命令行 angular小技巧 kubernetes 相关知识 一些windows下的工具 github 小技巧 angularjs 小技巧 java写代码的一些小技巧 lucene学习 在Windows上安装FishEye 快速安装eclipse插件 在fisheye中添加git repository Modbus 协议简介 读书笔记: angular性能调优 我的交叉编译经验谈 如何管理和配置opkg包 刷机失败后的恢复方法 Openwrt Flash Layout 分区调整 netgear wndr3700v4 刷新固件步骤 Openwrt应用包(package)编译 (基于Openwrt SDK) Openwrt编译 (基于Openwrt ImageBuilder) Build Openwrt环境完整过程 openwrt命令总结 在luci系统中增加服务 sftp 命令 系统完整性检查如何加载虚拟光驱 如何在java中启用jmxremote Bash Shell 技巧点滴 knockout和js测试基础 XAMPP 小技巧 knockout小技巧 有关discuz的资源与一些经验积累 javascript小技巧积累 在centos上安装jetty的过程记录 Vagrant构建虚拟开发环境 离线markdown编辑器:stackedit 关于阿里云服务器使用的几个小技巧 discuz被黑的处理办法 git 相关命令总结 BAE 本地开发环境调试笔记 yo 与 knockout 的使用 一些有用的在线工具网站资源 Discuz!X3.2 升级后无法登录后台的解决方法 knockout的一些有用的例子和资源 GoLang 学习笔记

标签


docker 学习笔记

2016年04月04日

Docker 国内镜像

containerops.cn/docker/registry

update docker machine hosts scripts

#!/usr/bin/env bash
#Usage docker-machine-update-hosts.sh hosts.conf default
#arg1 is a configuration file with hosts
#arg2 is the docker-machine name e.g. default

DOCKER_IP=$(docker-machine ip $2)
echo "$2 ip: $DOCKER_IP"

#Remove existing lines from hosts
while IFS='' read -r line || [[ -n "$line" ]]; do
  echo "Removing existing domain $line"
  sudo sed -i '' '/'$line'/d' /etc/hosts
done < "$1"

#Add new hosts to the bottom of the file
while IFS='' read -r line || [[ -n "$line" ]]; do
  echo "Adding entry $DOCKER_IP $line"
  sudo echo "$DOCKER_IP $line" >>/etc/hosts
done < "$1"

Docker ADD rpm file in Dockfile

Put this line before your rpm -i command:

ADD /host/abs/path/to/chrpath-0.13-14.el7.x86_64.rpm /chrpath-0.13-14.el7.x86_64.rpm

Then you’ll be able to do

RUN rpm -i chrpath-0.13-14.el7.x86_64.rpm

登录docker主机

docker-machine env default

切换到root用户

sudo -i

报错:Cannot connect to the Docker daemon的问题解决

sudo usermod -aG docker  hadoop(username)

开机自动启动docker

systemctl enable docker

运行Docker仓库

运行仓库并命名为docker-registry,让镜像存储在宿主机上的/opt/docker/registry/data/

sudo docker run -d -p 5000:5000 -v /opt/docker/registry/data:/tmp/registry-dev --name docker-registry registry:2.0.1
这里注意避免5000端口被占用而引起冲突,可以通过sudo docker ps 查看该容器是否已启动。接下来可以通过docker tag ,docker push进行简单测试,具体用法可以查询docker help tag和docker help push.

生成签名证书

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /opt/docker/registry/conf/docker-registry.key  -out /opt/docker/registry/conf/docker-registry.crt
这里一定要注意:创建证书的时候,可以接收所有默认,直到CN位置时,如果你是准备让外网访问,就需要外网的域名;如果是内网,可以输入运行私有仓库宿主机的别名。我们可以通过`ifconfig`查看ip,假定为10.10.62.103,通过sudo vi /etc/hosts添加一行到该文件并保存退出,例如:10.10.62.103 devregistry。这条命令主要是在/opt/docker/registry/conf/下创建证书docker-registry.key和docker-registry.crt,其中docker-registry.crt放在随后与docker-registry进行交互的装有Docker客户端宿主机上。需要了解的是,这个宿主机可以是运行docker-registry的server,也可以是能访问该域名或别名的装有docker的其他server。

创建能够访问仓库的用户名和密码

为了让允许的用户登录访问,需要利用htpasswd创建用户和密码,并存储于/opt/docker/registry/conf/docker-registry.htpasswd文件.

  • 安装htpasswd 如果该命令已安装,可以略过此步,否则利用如下命令进行安装
sudo yum install httpd-tools -y
  • 创建用户和密码
sudo htpasswd -c /opt/docker/registry/conf/docker-registry.htpasswd xl

第一个用户需要加-c参数,随后输入密码并确认。添加新用户不需要加-c参数。 例如:创建第二个用户

sudo htpasswd /opt/docker/registry/conf/docker-registry.htpasswd testu

运行Nginx

sudo docker run -d -p 443:443  -e REGISTRY_HOST="docker-registry" -e REGISTRY_PORT="5000" -e SERVER_NAME="localhost" --link docker-registry:docker-registry -v /opt/docker/registry/conf/docker-registry.htpasswd:/etc/nginx/.htpasswd:ro -v /opt/docker/registry/conf:/etc/nginx/ssl:ro --name docker-registry-proxy containersol/docker-registry-proxy
这里使用了一个镜像去创建nginx容器,如果我们利用独立的nginx去进行配置的话,要求nginx版本在1.7.5以上才能支持nginx.conf中add_header等配置。如果是作为内网使用,建议采用nginx容器这种方式就行。如果允许让外网访问,建议先拷贝docker-registry-proxy容器中nginx.conf配置的内容,然后根据实际情况调整upstream中相关ip,docker-registry.key,docker-registry.htpasswd等文件存放的位置。注意这块nginx.conf配置的server非常重要,需要配置为之前提到的域名或别名。

docker 基本概念

  • ENV 指定一个环节变量,会被后续 RUN 指令使用,并在容器运行时保留
ENV <key> <value>       # 只能设置一个变量
ENV <key>=<value> ...   # 允许一次设置多个变量
  • ENTRYPOINT 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而 CMD 是可以被覆盖的。如果需要覆盖,则可以使用 docker run –entrypoint 选项。 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个生效。
ENTRYPOINT [“executable”, “param1”, “param2”] (the preferred exec form,优先选择)
ENTRYPOINT command param1 param2 (shell form)
  • VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点
VOLUME ["/data"]
  • WORKDIR 为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
WORKDIR /path/to/workdir

用docker 给镜像打上tag

docker tag 5db5f8471261 ouruser/sinatra:devel
docker tag tianon/centos localhost:5000/pip/centos

再 push

docker push localhost:5000/pip/centos

Run ngnix locally

docker pull nginx
docker run -d -p 8080:80 ngnix
get vm ip address by " docker-machine ls"
http://host-ip:8080

如何启用 docker ssh

yum install openssh-server openssh-clients
service sshd start
chkconfig sshd on
ssh localhost
user: docker
pass: tcuser

搭建私有库步骤

docker run -d -p 5000:5000 --restart=always --name registry registry:2
docker pull ubuntu && docker tag ubuntu localhost:5000/ubuntu
docker push localhost:5000/ubuntu
docker pull localhost:5000/ubuntu

外部存储的registry

docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/data:/var/lib/registry \
  registry:2

配置 docker register

(systemctl show docker | grep EnvironmentFile 
 systemctl status docker | grep Loaded)
vi /etc/default/docker
DOCKER_OPTS="--insecure-registry pip-dev:5000 --dns 8.8.8.8 --dns 192.168.0.1"

vi /usr/lib/systemd/system/docker.service
add 
EnvironmentFile=-/etc/default/docker

docker网上书籍

http://abloz.com/hbase/book.html