ubuntu下安装docker并在docker中安装lamp

1.安装docker

root@ubuntu: sudo apt-get install software-properties-common #增加 add-apt-repository 命令
root@ubuntu: sudo apt-get install python-software-properties
root@ubuntu: sudo add-apt-repository ppa:dotcloud/lxc-docker #增加一个ppa源,如:ppa:user/ppa-name
root@ubuntu: sudo apt-get update #更新系统
root@ubuntu: sudo apt-get install lxc-docker

 


2.测试doctor是否安装成功

 

root@ubuntu:~# docker #出现如下信息表示docker安装成功
Usage: docker [OPTIONS] COMMAND [arg…]
-H=[tcp://127.0.0.1:4243]: tcp://host:port to bind/connect to or unix://path/to/socket touse

A self-sufficient runtime for linux containers.

 

3.从网站上 pull 一个 lamp 镜像

 

core@localhost ~/base $ docker pull tutum/lamp
Pulling repository tutum/lamp
4b32789c7d66: Download complete

 

4.使用默认方式启动 lamp 容器

 

core@localhost ~/base $ docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
#启动应用并映射 8080 端口和 3306 端口
0ee00c97a5cdefb985baf826c16723f333aa5edddee4072a5107c724ad09f10d
core@localhost ~/base $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ee00c97a5cd tutum/lamp:latest “/run.sh” 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, 0.0.0.0:8080->80/tcp lonely_davinci
e3c136d76b44 tutum/tomcat:8.0 “/run.sh” 45 minutes ago Up 45 minutes 0.0.0.0:80->8080/tcp tomcat001
fe9e65aaf58c dl.dockerpool.com:5000/mysql:5.7 “/entrypoint.sh mysq 51 minutes ago Up 51 minutes 3306/tcp db001,tomcat001/tomysql

 

然后通过浏览器访问 http://127.0.0.1:8080 查看是否成功。

5.部署自己的 PHP 应用

 

core@localhost ~ $ mkdir php
core@localhost ~ $ cd php/
core@localhost ~/php $ touch Dockerfile
core@localhost ~/php $ vi Dockerfile
core@localhost ~/php $ docker build -t dockerpool/my-lamp-app .

 

Dockerfile 内容如下:

 

FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
#这里替换 https://github.com/username/customapp.git 地址为你自己的项目地址
EXPOSE 80 3306
CMD [“/run.sh”]

 

6.再次启动自己的容器就完成部署了

 

core@localhost ~/php $ docker stop 0ee
0ee
core@localhost ~/php $ docker rm 0ee
0ee
core@localhost ~/php $ docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app

 

7.在 php 程序中连接数据库

在容器中访问 mysql 数据库

这个镜像的 mysql 数据库有个默认的 root 用户,本地连接时可以不用密码,所以在代码访问非常简单。

<?php
$mysql = new mysqli(“localhost”, “root”);
echo “MySQL Server info: “.$mysql->host_info;
?>

在容器外部访问 mysql 数据库

当我们第一次以 tutum/lamp 镜像启动容器的时候,它会自动创建一个叫 admin 的 mysql 用户,并生成一个随机密码,使用「docker logs +容器ID」可以获取到这个密码。

 

core@localhost ~/php $ docker logs 9cb

 

=> An empty or uninitialized MySQL volume is detected in /var/lib/mysql
=> Installing MySQL …
=> Done!
=> Waiting for confirmation of MySQL service startup
=> Creating MySQL admin user with random password
=> Done!
========================================================================
You can now connect to this MySQL Server using:

mysql -uadmin -p2Ijg6gvmM0N3 -h -P

Please remember to change the above password as soon as possible!
MySQL user ‘root’ has no password but only allows local connections
========================================================================

8.docker常用命令

8.1、docker ps命令
linjiqin@ubuntu:~$ sudo docker ps #列出当前所有正在运行的container
linjiqin@ubuntu:~$ sudo docker ps -l #列出最近一次启动的,且正在运行的container
linjiqin@ubuntu:~$ sudo docker ps -a #列出所有的container
注意:
a、其他用法请参考 sudo docker ps -h
b、还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon

8.2、docker export命令
linjiqin@ubuntu:~$ container_id=`docker run -d ls`
linjiqin@ubuntu:~$ docker export $container_id > image.tgz

8.3、docker import命令
linjiqin@ubuntu:~$ cat image.tgz | sudo docker import – simple_dev #simple_dev为自定义的镜像名称

8.4、docker port命令
linjiqin@ubuntu:~$ docker run -p 80:8080 #映射容器的8080端口到宿主机的80端口

8.5、删除容器
8.5.1、删除所有容器
linjiqin@ubuntu:~$ sudo docker rm `sudo docker ps -a -q`

8.5.2、删除具体某个容器
linjiqin@ubuntu:~$ sudo docker rm $CONTAINER_ID

8.6、docker命令快速参考
linjiqin@ubuntu:~$ sudo docker images #查看本地镜像
linjiqin@ubuntu:~$ sudo docker attach $CONTAINER_ID #启动一个已存在的docker实例
linjiqin@ubuntu:~$ sudo docker stop $CONTAINER_ID #停止docker实例
linjiqin@ubuntu:~$ sudo docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行

linjiqin@ubuntu:~$ sudo docker inspect $CONTAINER_ID #查看container的实例属性,比如ip等等

9.docker删除镜像

要停止所有的container,这样才能够删除其中的images:

9.1、docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

9.2、查看当前有些什么images

docker images

9.3、删除images,通过image的id来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id为<None>的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)