Docker学习(1)基础命令 和 构建nginx web服务
2017-10-25 11:34
776 查看
一、前言
是的,最近又开始抽空啃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实现):
在命令: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内容:
这个简单的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
启动容器: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规则,改变要挂载的目录的安全性文本(不做说明)
新手一枚,欢迎拍砖~
~ ~
是的,最近又开始抽空啃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_web FROM ubuntu:14.04 MAINTAINER XXX "xxx@xxx.com" RUN apt-get update && apt-get install -y nginx RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html EXPOSE 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.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
这个简单的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
<head> <title>Test website</title> </head> <body> <h1>This is a test website</h1> </body>
启动容器: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规则,改变要挂载的目录的安全性文本(不做说明)
新手一枚,欢迎拍砖~
~ ~
相关文章推荐
- 通过构建微服务来学习Docker
- docker学习笔记3—使用Dockerfile与docker build命令创建一个nginx服务器镜像,并使用浏览器进行访问
- Docker学习笔记:Docker 基础用法和命令帮助
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务(转载)
- nginx特性及基础概念、nginx web服务配置详解
- 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
- 跟我学习dubbo-构建Dubbo服务消费者Web应用的war包并在Tomcat中部署(6)
- docker实战1 (docker-toolbox的安装,docker基础命令详解[运行,容器导入/导出,镜像导入/导出,数据卷,网络],构建100个docker实例的测试环境)
- RESTful GeoWeb学习手记(一):构建REST风格的网络服务
- Linux基础-----------nginx安装和nginx web、nginx反向代理、nfs 服务
- Linux基础系列:常用命令(6)_nfs服务与nginx服务
- RESTful GeoWeb学习手记(一):构建REST风格的网络服务
- docker学习(2)--基础命令
- 分布式架构学习之:006--构建Dubbo服务消费者Web应用的war包并在Tomcat中部署
- 【Docker江湖】之创建Web应用服务镜像——Apache/Nginx
- Flask +jinja2+bootstrap+sqlite3+sqlalchemy构建web基础学习总结
- Nginx学习历程_1_Nginx提供Web服务
- SpringBoot,SpringCloud,Docker构建微服务学习笔记
- Docker学习笔记六 使用Docker构建服务
- 【Docker】基于docker+etcd+confd + haproxy构建高可用、自发现的web服务