docker 学习笔记
docker 简介
docker有两个版本。社区版本(se)和企业版本(ee)。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Linux 容器
借助于namespace的隔离机制和cgroup限额功能,LXC提供了一套统一的API和工具来建立和管理container,所以docker需要linux内核的支持。
注意
docker 不是虚拟机,仅仅是一个容器。所以不会有init进程。reboot是没有的, rc 也是不存在的。我们可以理解成轻量级的虚拟机,但是他又不是真正虚拟机。
docker的安装
接下来是记录我安装docker的一些问题以及步骤
ubuntu16.04 上安装docker
官方提供了ubuntu系列机器的自动安装脚本。所以执行他的脚本就好了。脚本地址https://get.docker.com/
所以执行下面命令:
$ wget -qO- https://get.docker.com/ | sh
或者
$ curl https://get.docker.com/ | sh
认识 docker
一些docker的名次解释一下
镜像(image)
iso称为镜像。同一个东西。
容器(container)
使用镜像创建的一个运行环境。类似于虚拟机的创建好的一台虚拟机环境。
问题集合
使用中遇到的一些问题。记录了下来。
docker启动执行脚本
等待补充
不是root用户使用docker命令如何不加sudo
不是root用户自行docker的一些命令会报一些错误。必须加sudo权限。避免每次都加sudo。
下面是解决办法:
- 如果还没有 docker group 就添加一个:
$ sudo groupadd docker
- 将用户加入该 group 内。然后退出并重新登录就生效啦。
$ sudo gpasswd -a ${USER} docker
- 重启 docker 服务
$ sudo service docker restart
然后就是重新进入命令行,因为有缓存。所以需要重新进入。
命令解释
下面对命令进行一些解释,或者说是翻译。
docker --help
--config string //后面跟上配置文件路径 ,默认是 /root/.docker
常用命令
docker run
运行一个全新的容器。
- -t:在新容器内指定一个伪终端或终端。
- -i:允许你对容器内的标准输入 (STDIN) 进行交互。
- __-d__表示后台运行
- -p 表示进行物理机和docker的端口映射 本机端口:容器的端口 。并且允许多映射。
docker pull [iamge]
将hub.docker.com上已有的镜像下载到docker里面。
可以通过 docker search [keywpord] 来进行查找
docker ps
这个命令是查看正在运行的容器。
-a 参数,列出所有的容器
docker container start [container ID]
启动容器的命令
参数说明
-i 交互式界面
Docker 容器镜像删除
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
2.查看当前有些什么images
docker images
3.删除images,通过image的id来指定删除谁
docker rmi <image id>
想要删除untagged images,也就是那些id为
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
docker 部署web服务
下载ubuntu16.04的镜像
$ docker pull ubuntu:16.04
创建一个新的容器
将本机8080端口映射到容器的80端口
$ docker run -i -t -p 8080:80 ubuntu:16.04 /bin/bash
安装lamp环境
$ apt-get update
$ apt-get install apache2 php7.0 mysql-server libapache2-mod-php7.0
宿主机 apache 反向代理配置
目的是为了都使用80 端口,参考资料
步骤:
- 加载apache模块,使用a2enmod命令加载模块
$ a2enmod proxy proxy_balancer proxy_http
注意: a2enmod 是添加模块 a2dismod 是删除模块
- 修改配置文件 /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
#配置站点的域名
ServerName xxx.com
#配置站点的管理员信息
ServerAdmin xxx@gmail.com
#off表示开启反向代理,on表示开启正向代理
ProxyRequests Off
ProxyMaxForwards 100
ProxyPreserveHost On
#这里表示要将现在这个虚拟主机跳转到本机的4000端口
ProxyPass / http://127.0.0.1:4000/
ProxyPassReverse / http://127.0.0.1:4000/
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
</VirtualHost>