Docker学习(1)基础命令 和 构建nginx web服务

来源:互联网 发布:java随机生成汉字名字 编辑:程序博客网 时间:2024/06/03 17:11

一、前言

是的,最近又开始抽空啃Docker了,不过不同以往的是,以前是通过网上找资料,学习的一点儿都不系统。

学习资料为《第一本Docker书》(修订版),电子版下载地址:

百度盘:链接: https://pan.baidu.com/s/1sloeSrV 密码: peqh

CSDN:http://download.csdn.net/download/smartdt/10031690

关于学习的内容,有些很有必须要去归纳总结一下,故以为。

Docker常用资源:

Docker官方主页(http://www.docker.com/)。

Docker Hub(http://hub.docker.com)。

Docker官方博客(http://blog.docker.com/)。

Docker官方文档(http://docs.docker.com/)。

Docker快速入门指南(http://www.docker.com/tryit/)。

Docker的GitHub源代码(https://github.com/docker/docker)。

Docker Forge(https://github.com/dockerforge):收集了各种Docker工具、组件和服务。

Docker邮件列表(https://groups.google.com/forum/#!forum/dockeruser)。

Docker的IRC频道(irc.freenode.net)。

Docker的Twitter主页(http://twitter.com/docker)。

Docker的StackOverflow问答主页(http://stackoverflow.com/search?q=docker)。

Docker官网(http://www.docker.com/)。


二、常用命令

关于Docker的简介、使用范畴、安装等就不叙述了。

1.sudo docker info:查看docker程序是否存在,功能是否正常;


2.sudo docker run -i -t ubuntu /bin/bash

   sudo docker create -it ubuntu /bin/bash --name testapp,create和run的性质一样。

首先,我们告诉Docker执行docker run命令,并指定了-i和-t两个命令行参数。

-i标志保证容器中STDIN是开启的,尽管我们并没有附着到容器中。持久的标准输入是交互式shell的“半边天”,

-t标志则是另外“半边天”,它告诉Docker为要创建的容器分配一个伪tty终端。

这样,新创建的容器才能提供一个交互式shell。若要在命令行下创建一个我们能与之进行交互的容器,

而不是一个运行后台服务的容器,则这两个参数已经是最基本的参数了。

3.sudo docker run --name bob_the_container -i -t ubuntu /bin/bash

上述命令将会创建一个名为bob_the_container的容器,--name标志来实现

4.sudo docker start【或stop】 bob_the_container【或容器ID】

重新启动或停止容器,可以是容器名也可以是容器ID。

5.docker ps 查看正在运行的容器,docker ps -a 查看包括停止的所有容器,

docker ps -n 3查看前3条容器信息

6.sudo docker attach bob_the_container【或容器ID】,重新附着到该容器的会话上,如图:


7.sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

上面的docker run命令使用了-d参数,因此Docker会将容器放到后台运行。

我们还在容器要运行的命令里使用了一个while循环,该循环会一直打印hello world,直到容器或其进程停止运行。

8.docker logs daemon_dave ,用docker logs命令来获取容器的日志;

sudo docker logs -f daemon_dave,方式同linux中tail -f xxx.log;

sudo docker logs --tail 10 daemon_dave ,只展示前10条

9.sudo docker top daemon_dave【容器名】;查看容器进程

10.sudo docker statsdeamon_dave deavmon_xxx ;它用来显示一个或多个容器的统计信息。如图:


11.sudo docker exec -d daemon_dave touch /etc/new_config_file

在容器内部额外启动新进程,上面例子中的命令会在daemon_dave容器内创建了一个空文件,

文件名为/etc/new_config_file。通过docker exec后台命令,可以在正在运行的容器中进行维护、监控及管理任务。

**与attach的区别:

docker attach只是进入到容器中,当以attach进入到容器后,exit退出的时候,容器也随之stop了

docker exec执行容器,进入后exit退出,不会导致容器退出。


12.sudo docker inspect daemon_dave,获得更多的容器信息。

也可以用-f或者-format标志来选定查看结果:

sudo docker inspect --format='{{ .State.Running }}' daemon_dave

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' daemon_dave等

如图:


13.sudo docker rm daemon_dave删除容器(容器名或者容器ID)

*****sudo docker rmi xxxxx/dave删除镜像(镜像名或者镜像ID【docker images中的】)

删除容器必须是在该容器stop的情况下。

sudo docker rm `sudo docker ps -a -q`,删除全部容器。-a代表所有,-q返回容器ID,从而达到删除所有容器

14.sudo docker export createapp > xxxxx.tar,导出容器【容器ID或容器名】

15.sudo cat xxxx.tar | sudo docker import - test/ubuntu:v1,导入容器,通过docker images查看

16.docker save -o ubuntu_14.04.tar ubuntu:14.04,保存镜像文件【注意与docker export区分】

17.docker load --input ubuntu_14.04.tar或docker load < ubuntu_14.04.tar,加载镜像文件

【注意与docker import区分】

18.sudo docker login,登录到docker hub

19.docker search xxx ,docker pull ubuntu:12.04,docker images, docker search不叙述

20.sudo docker commit -m"A new custom image" -a"James Turnbull" 4aab3ce3cb76

 username/apache2:webserver

commit到docker hub -m是备注 -a是作者信息

21.sudo docker push,推到docker hub上。


三、构建包含简单Web服务器的Docker镜像

mkdir static_web &&  cd static_web,在static_web下新建Dockerfile,内容如下(通过Dockerfile实现):

#利用Dockerfile构建static_webFROM ubuntu:14.04MAINTAINER XXX "xxx@xxx.com"RUN apt-get update && apt-get install -y nginxRUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.htmlEXPOSE 80

在命令:docker build -t xxx/static_web .

执行后docker images下会有名为xxx/static_web的镜像文件信息。

当然也可以带上版本等信息:docker build -t xxx/static_web:v1 . 


四、Docker镜像之Nginx Web服务器

1.mkdir sample && cd sample 

touch Dockerfile

2.mkdir nginx && cd nginx,后wget二个配置文件

wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/nginx/global.conf
wget https://raw.githubusercontent.com/jamtur01/dockerbook-code/master/code/5/sample/nginx/nginx.conf

cd ..【回到sample文件夹下】

3.Dockerfile内容:

#通过docker构建nginx web服务FROM ubuntu:14.04MAINTAINER James Turnbull "james@example.com"ENV REFRESHED_AT 2014-06-01RUN apt-get -yqq update && apt-get -yqq install nginxRUN mkdir -p /var/www/html/websiteADD nginx/global.conf /etc/nginx/conf.d/ADD nginx/nginx.conf /etc/nginx/nginx.confEXPOSE 80
这个简单的Dockerfile内容包括以下几项。
a.安装Nginx;b.在容器中创建一个目录/var/www/html/website/;c.将来自我们下载的本地文件的Nginx配置文件添加到镜像中;d.公开镜像的80端口。
执行命令:docker build -t xxx/nginx:v1.0 . 

命令:docker images,如图:


现在使用xxx/nginx镜像,开始从这个镜像构建可以用来测试sample网站的容器。
mkdir website && cd website
vim index.html
Test website

This is a test website


启动容器:docker run -d -p 50080:80 --name website -v $PWD/website:/var/www/html/website xxx/nginx:v1.0 nginx


访问:http://127.0.0.1:50080/


修改本地$PWD/website/下的index.html,添加别的内容后,再刷新页面。


可以看到,Sample网站已经更新了。显然这个修改太简单了,不过可以看出,更复杂的修改也并不困难。更重要的是,正在测试网站的运行环境,完全是生产环境里的真实状态。现在可以给每个用于生产的网站服务环境(如Apache、Nginx)配置一个容器,给不同开发框架的运行环境(如PHP或者Ruby on Rails)配置一个容器,或者给后端数据库配置一个容器,等等。

备注:如果是在centos7环境下,可能会出现403的情况,通过docker exec -it 容器ID /bin/bash 命令进入后会发现/website/下有 Permission denied情况。原因是CentOS7中的安全模块selinux把权限禁掉了。

解决方法:1.加入--privileged=true

docker run ...... -v $PWD/website:/var/www/html/website  --privileged=true ...

2.临时关闭selinux(不做说明)

3.添加selinux规则,改变要挂载的目录的安全性文本(不做说明)


新手一枚,欢迎拍砖~ ~ ~





















阅读全文
0 0
原创粉丝点击