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
Test website This is a test website
可以看到,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学习(1)基础命令 和 构建nginx web服务
- Docker学习(4)构建Apache+Jekyll服务和Java应用
- Docker学习笔记:Docker 基础用法和命令帮助
- Docker学习笔记:Docker 基础用法和命令帮助
- 实战docker,构建nginx反向代理tomcat,学习link和docker-compose
- nginx web服务基础搭建
- 【Docker构建】- Nginx创建带Nginx服务的Centos Docker镜像
- 学习笔记-Docker基础命令
- Gradle+Spring Boot+Git+Docker构建web服务
- [bigdata-124] docker+django2.0 构建web服务
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
- Docker学习(3)构建Jenkins和Docker服务器
- C# Builder构建Web服务和客户端
- C# Builder构建Web服务和客户端
- Nginx学习历程_1_Nginx提供Web服务
- Docker学习(2)构建并测试Web应用程序
- 使用docker构建JavaWeb服务
- 6-使用Docker构建服务
- SVN域名变更后,eclipse中项目地址更新步骤
- pycharm平台下的Django教程
- 循环神经网络(RNN)反向传播算法(BPTT)
- HTTP详解(1)-工作原理
- iOS手机版本号、序列号、应用名称等相关字段获取
- Docker学习(1)基础命令 和 构建nginx web服务
- 如何用C++递归的方法来将循环链表的unique data找出来
- 查看本机ip等配置
- 图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson(Matlab实现)
- Java基础------重载
- sed实践
- 由Google Protocol Buffer的小例子引起的g++编译问题
- Four Operations HDU
- C#实现图片切割的方法