Skip to content
6 changes: 3 additions & 3 deletions 4/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ $ sudo docker run -it jamtur01/test /bin/ps
ENTRYPOINT ["/usr/sbin/nginx"]
```

`-g "daemon off;"`作为参数传递给ENTRYPOINT指令
`-g "daemon off;"`作为参数传递给ENTRYPOINT指令
```
$ sudo docker run -it jamtur01/static_web -g "daemon off;"
```
Expand Down Expand Up @@ -280,5 +280,5 @@ $ sudo docker rmi jamtur01/static_web

删除所有镜像
```
$ sudo docker rmi `sudo docker ps imgages -a -q`
```
$ sudo docker rmi `sudo docker imgages -a -q`
```
89 changes: 86 additions & 3 deletions 5/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@ $ wget http://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/s
$ cd ..
```

Dockerfile 内容

```
FROM ubuntu:14.04
MAINTAINER James Turnbull "james@example.com"
ENV REFRESHED_AT 2014-06-01
RUN apt-get -yqq update && apt-get -yqq install nginx
RUN mkdir -p /var/www/html/website
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
```

构建新的Nginx镜像
```
$ sudo docker build -t jamtur01/nginx .
Expand Down Expand Up @@ -64,6 +77,36 @@ $ mkdir sinatra && cd sinatra
$ touch Dockerfile
```

Dockerfile 内容

```
FROM ubuntu:14.04
MAINTAINER James Turnbull "james@example.com"
ENV REFRESHED_AT 2014-06-01

RUN apt-get -yqq update && apt-get -yqq install wget curl gnupg2 libcurl3 build-essential redis-tools
RUN apt-get install -y --force-yes zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev

RUN cd /tmp
COPY ruby-2.5.0.tar.gz /tmp/
#RUN wget http://ftp.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
#RUN wget http://mirrors.nju.edu.cn/ruby/2.5/ruby-2.5.0.tar.gz
RUN tar -xvzf /tmp/ruby-2.5.0.tar.gz -C /tmp/
RUN cd /tmp/ruby-2.5.0/ && ./configure --prefix=/usr/local; make; make install
RUN ruby -v

RUN ln -sf /usr/local/bin/ruby /usr/bin/ruby

RUN gem install --no-rdoc --no-ri sinatra json redis

RUN mkdir -p /opt/webapp

EXPOSE 4567

CMD [ "/opt/webapp/bin/webapp" ]
```


构建新的Sinatra镜像
```
$ sudo docker build -t jamtur01/sinatra .
Expand Down Expand Up @@ -133,6 +176,20 @@ $ mkdir sinatra/redis && cd sinatra/redis
$ touch Dockerfile
```

Dockerfile 内容
```
FROM ubuntu:14.04
MAINTAINER James Turnbull "james@example.com"
ENV REFRESHED_AT 2014-06-01

RUN apt-get -yqq update && apt-get -yqq install redis-server redis-tools
RUN sysctl -w vm.overcommit_memory=1

EXPOSE 6379

ENTRYPOINT ["/usr/bin/redis-server"]
```

构建Redis镜像
```
$ sudo docker build -t jamtur01/redis .
Expand Down Expand Up @@ -207,8 +264,9 @@ $ sudo docker run -d --net=app --name db jamtur01/redis
链接redis容器
```
$ sudo docker run -p 4567 \
--net=app --name webapp \
-v $PWD/webapp_redis:/opt/webapp jamtur01/sinatra
--net=app --name webapp -t -i \
-v $PWD/webapp_redis:/opt/webapp jamtur01/sinatra \
/bin/bash
```

### Docker用于持续集成
Expand Down Expand Up @@ -245,4 +303,29 @@ $ sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

#### 创建多配置作业

创建`Docker_matrix_job`多配置项目,选择Git并指定测试仓库`https://github.com/jamtur01/docker-jenkins-sample.git`,点击`Add Axis`按钮,并选择`User-defined Axis`,定义名字为`OS`,值为`centos debian ubuntu`,选择`Delete workspace before build starts`在构建前删除工作空间,点击`Add Build Step`增加一个构建步骤,选择`Execute shell`,使用定义的脚本来启动测试Docker,点击`Add post-build action`加入构建后的动作,加入一个`Publish JUnit test result report`公布JUnit测试结果报告,指定`Test report XMLs`测试报告的XML文件为`spec/reports/*.xml`,最后点击Save保存作业
创建`Docker_matrix_job`多配置项目,选择Git并指定测试仓库`https://github.com/jamtur01/docker-jenkins-sample.git`,点击`Add Axis`按钮,并选择`User-defined Axis`,定义名字为`OS`,值为`centos debian ubuntu`,选择`Delete workspace before build starts`在构建前删除工作空间,点击`Add Build Step`增加一个构建步骤,选择`Execute shell`,使用定义的脚本来启动测试Docker,点击`Add post-build action`加入构建后的动作,加入一个`Publish JUnit test result report`公布JUnit测试结果报告,指定`Test report XMLs`测试报告的XML文件为`spec/reports/*.xml`,最后点击Save保存作业


### FAQ

- Q:

```
Step 12/15 : RUN gem install --no-rdoc --no-ri jekyll
---> Running in badbe1b0e565
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
The command '/bin/sh -c gem install --no-rdoc --no-ri jekyll' returned a non-zero code: 1
```

- A:

```
Dockerfile 中增加
RUN apt-get install -y --force-yes zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev
```



28 changes: 24 additions & 4 deletions 6/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ $ rm -rf james_blog/.git

创建Jekyll容器
```
$ sudo docker run -v james_blog:/data --name james_blog jamtur01/jekyll
$ sudo docker run -v $PWD/james_blog:/data --name james_blog jamtur01/jekyll
```

卷的几个有用的特征
Expand Down Expand Up @@ -199,9 +199,10 @@ $ sudo docker port tprov

创建Node.js的Dockerfile
```
$ mkdir -p nodejs/nodeapp && cd nodejs
$ mkdir -p nodejs/nodeapp && cd nodejs/nodeapp
$ wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/6/node/nodejs/nodeapp/package.json -P nodeapp
$ wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/6/node/nodejs/nodeapp/server.js -P nodeapp
$ cd ..
$ touch Dockerfile
```

Expand Down Expand Up @@ -273,7 +274,7 @@ $ sudo docker run -it --rm --volumes-from redis_primary ubuntu cat /var/log/redi

运行第一个Redis副本容器
```
$ sudo docker run -d -h redis_repilica1 --name redis_repilica1 --net express jamtur01/redis_replica
$ sudo docker run -d -h redis_replica1 --name redis_replica1 --net express jamtur01/redis_replica
```

读取Redis副本容器的日志
Expand Down Expand Up @@ -352,7 +353,26 @@ $ sudo docker logs -f logstash
$ sudo docker kill -s <signal> <container>
```

安装 nsenter
```
$ sudo docker run -v /usr/local/bin/:/target jpetazzo/nsenter
```

获取容器的进程ID
```
$ sudo docker inspect --format '{{.State.Pid}}' <container>
```
```

使用 nsenter 进入容器
```
$ sudo nsenter --target $PID --mount --uts --ipc --net --pid
```

使用 nsenter 在容器内执行命令
```
sudo nsenter --target $PID --mount --uts --ipc --net --pid ls
```




6 changes: 4 additions & 2 deletions 8/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ http://docker.example.com:2375/containers/create \
通过API创建容器,提供更多配置
```
$ curl -X POST -H "Content-Type: application/json" \
http://docker.example.com:2375/containers/create?name=jekyll" \
"http://docker.example.com:2375/containers/create?name=jekyll" \
-d '{
"Image": "jamtur01/jekyll",
"Hostname": "jekyll"
Expand Down Expand Up @@ -142,6 +142,8 @@ $ sudo openssl genrsa -des3 -out server-key.pem
$ sudo openssl req -new -key server-key.pem -out server.csr
```

注意需要设置 CN (Common Name) 为 **docker.example.com**

对CSR进行签名
```
$ sudo openssl x509 -req -days 365 -in server.csr -CA ca.pem \
Expand Down Expand Up @@ -230,4 +232,4 @@ $ cp client-cert.pem ~/.docker/cert.pem
测试TLS连接
```
$ sudo docker -H docker.example.com:2376 --tlsverify info
```
```