docker 实践

https://doc.yonyoucloud.com/doc/docker_practice/etcd/etcdctl.html

 

启动 http restful API

 

 

 

docker批量映射端口

怎么映射宿主端口?Dockerfile 中的EXPOSE和 docker run -p 有啥区别? 

 

Docker中有两个概念,一个叫做 EXPOSE ,一个叫做 PUBLISH 。

 

EXPOSE 是镜像/容器声明要暴露该端口,可以供其他容器使用。这种声明,在没有设定 --icc=false的时候,实际上只是一种标注,并不强制。也就是说,没有声明 EXPOSE 的端口,其它容器也可以访问。但是当强制 --icc=false 的时候,那么只有 EXPOSE 的端口,其它容器才可以访问。

PUBLISH 则是通过映射宿主端口,将容器的端口公开于外界,也就是说宿主之外的机器,可以通过访问宿主IP及对应的该映射端口,访问到容器对应端口,从而使用容器服务。

EXPOSE 的端口可以不 PUBLISH,这样只有容器间可以访问,宿主之外无法访问。而 PUBLISH 的端口,可以不事先 EXPOSE,换句话说 PUBLISH 等于同时隐式定义了该端口要 EXPOSE。

 

docker run 命令中的 -p, -P 参数,以及 docker-compose.yml 中的  ports 部分,实际上均是指 PUBLISH。

 

小写 -p 是端口映射,格式为 [宿主IP:]<宿主端口>:<容器端口>,其中宿主端口和容器端口,既可以是一个数字,也可以是一个范围,比如:1000-2000:1000-2000。对于多宿主的机器,可以指定宿主IP,不指定宿主IP时,守护所有接口。

 

大写 -P 则是自动映射,将所有定义 EXPOSE 的端口,随机映射到宿主的某个端口。

 

-p 是可以用范围的:

Bash
-p 8001-8010:8001-8010

 

 

Docker 30天 介绍怎么使用API

Docker 相关API

Template

EXPOSE 声明端口

Docker网络原则入门:EXPOSE,-p,-P,-link

容器访问控制

外部访问容器

Docker手动修改Iptables添加端口映射

网络虚拟化文章

docker动态映射运行的container端口

使用iptables管理docker容器做端口映射网络

 

no space for docker image (docker image的磁盘空间不足)

Not recommend use soft link, for there will be some problem with docker rm.

REF:

move docker data directory to another location 

How to change the docker image installation directory?

Specifying a default Docker storage directory for manually installed Docker
Docker forums How do I change the Docker image installation directory? 

 

df -h  |grep -v "/var/lib"

systemctl stop docker
systemctl status docker

DOCPATH=/home/var/lib/docker
mkdir $DOCPATH -p

sed -i '1h;1!H;$!d;x;s@^\(.*\)}@\1  {\n    "data-root": "'"$DOCPATH"'"\n  }\n}@' /etc/docker/daemon.json

sudo rsync -aP /var/lib/docker/ $DOCPATH

sudo mv /var/lib/docker /var/lib/docker.old

systemctl start docker


# example
# https://stackoverflow.com/questions/18291341/sed-only-the-last-match-pattern
sed '/.*boy/,$!b;//{x;//p;x;h};//!H;$!d;x;s//&s/' <<< "boy
> boy
> girl
> boy"

 maybe issue(This is what the docker forums suggest), try:

DOCPATH=/home/var/lib/docker
ln -s $DOCPATH /var/lib/docker

or change

SEVICE=$(systemctl status docker |grep Loaded | awk -F'[(;]' '{print $2}')

# For docker version before 17.06-ce:
sed -i "s@\(ExecStart.*\)@\1 -g $DOCPATH@" $SEVICE
# or 
sed -i "s@\(ExecStart.*\)@\1 --graph=\"$DOCPATH\"@" $SEVICE
# For docker version after 17.06-ce:
sed -i "s@\(ExecStart.*\)@\1 -g $DOCPATH@" $SEVICE
sed -i "s@\(ExecStart.*\)@\1 --data-root=\"$DOCPATH\"@" $SEVICE

sudo systemctl daemon-reload
sudo systemctl restart docker

# For docker version before 17.06-ce:
docker info|grep "loop file"
# For docker version after 17.06-ce:
docker info|grep "Docker Root Dir"

 

posted @ 2018-01-05 18:56  lvmxh  阅读(183)  评论(0编辑  收藏  举报