Docker是在容器的基礎上,進行了進一步的封裝,極大的簡化了容器的建立和維護。使得Docker技術比虛擬機技術更爲輕便、快捷。php
下面是兩張對比圖。
html
能夠看到傳統虛擬機技術是虛擬出一套硬件,而後再在上面運行一個完整的操做系統。然而docker的應用進程直接運行於宿主的內核,容器內沒有本身的內核也沒有硬件虛擬。因此更加輕便。
<br>nginx
指定基礎鏡像,形如 FROM ubuntu:16.04 (容器將安裝ubuntu16.04)git
用來執行命令,形如 RUN apt-get updatedocker
複製文件,形如COPY flag.php /var/www/html/(COPY 本地路徑 容器內路徑) 能夠使用通配符 * ?apache
更高級的複製文件(能自動解壓縮),形如ADD ubuntu-amd64-root.tar.gz /ubuntu
容器啓動命令,推薦使用exec格式:CMD ["可執行文件", "參數1", "參數2"...] (必定要用雙引號)。形如: CMD ["sh","-c","echo $HOME"]tcp
設置環境變量,形如ENV NODE_VERSION 7.2.0ui
<br>spa
FROM php:7.0-apache # Meta Information MAINTAINER Donek1 "A1oe@A1oe.com" COPY php.ini /usr/local/etc/php/php.ini COPY index.php /var/www/html/index.php COPY flag /flag COPY start.sh /start.sh RUN chmod +x /start.sh RUN rm /var/www/html/index.html CMD ["/start.sh"]
<br>
docker build -t nginx:v3 . (注意後面有個英文句號)
$ docker build -t nginx:v3 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM nginx ---e43d811ce2f4
解釋:-t指定的是鏡像名稱nginx:v3,英文句號標識當前目錄
docker images / docker image ls
root@ubuntu:~/DockerFiles# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx v1.1 a473544051ce 4 seconds ago 109MB
docker run -t -i -p 8080:80 nginx
解釋:-p指定端口,以上意思是容器的80端口映射到8080端口(須要用虛擬機ip:8080來訪問)
docker ps -a查看全部容器 docker stop name/id 中止全部container:docker stop $(docker ps -a -q)
docker rm name/id(須要先中止) 或者docker rm -f id/name 刪除全部container:docker rm $(docker ps -a -q)
docker rmi name/id 刪除所有image:docker rmi $(docker images -q)
<br>
1.Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use 端口衝突了 解決: -p 8080:80 (前一個端口爲映射出的端口從80改成8080)
2.刪除untagged images,也就是那些id爲<None>的image:
docker rmi -f id/name 或者 docker rmi $(docker images | grep "<none>" | awk "{print $3}")
3.刪除建立時能夠用id/name,不過用id更方便。 舉例:image id1=asd45xxx ; image id2=4321zx6; 刪除的時候能夠 docker rmi 4,這樣就刪除了id2
<br>
建立:該文件目錄下執行docker-compose build 運行:執行docker-compose up -d
<br> 參考文檔:https://yeasy.gitbooks.io/docker_practice/image/build.html