Docker是開源的應用容器引擎。可以理解為輕量級的虛擬機,又可以理解為開了掛的chroot。 官方解釋為docker是一個開源的項目,可以用來將任何應用以輕量級容器的形式,打包,發佈和運行。 docker架構: docker run images_name 運行容器 docker images 查 ...
Docker是開源的應用容器引擎。可以理解為輕量級的虛擬機,又可以理解為開了掛的chroot。
官方解釋為docker是一個開源的項目,可以用來將任何應用以輕量級容器的形式,打包,發佈和運行。
docker架構:
docker run images_name 運行容器
docker images 查看所有本地的容器
docker pull 獲取image
docker build -t image_name 路徑名 創建image
docker rm 刪除container
docker rmi 刪除image
docker ps 查看正在運行的容器
docker
-p 埠映射
-d 直接返回
docker cp 文件 容器id://容器內的地址 cp文件到容器內的地址,但當重啟後,文件不再容器內,這時就需要保存,保存的命令為:docker commit -m ‘message’ 容器id 新的容器名稱,這時就產生了一個新的image
docker stop 容器id 停止當前容器
docker ps -a 歷史容器
例:下載nginx鏡像並運行:
[root@localhost ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx Digest: sha256:9688d0dae8812dd2437947b756393eb0779487e361aa2ffbc3a529dca61f102c Status: Image is up to date for nginx:latest docker.io/library/nginx:latest 運行nginx鏡像: [root@localhost ~]# docker run -p 8080:80 -d docker.io/nginx # cad31276eaaa32efa41eb5355189b5c657a4bac22cc0da24f43fd889c8e2c883 將本地的8080埠映射到80埠 [root@localhost ~]# netstat -anp |grep 8080 tcp6 0 0 :::8080 :::* LISTEN 1972/docker-proxy 開放8080埠 [root@localhost ~]# iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
通過編寫簡單的文件自創docker鏡像
1、首先建立文件夾Docker
2、在Docker文件夾下建立Dockerfile文件,並編輯:
FROM alpine:latest ##是一個專門針對docker做的一個環境 MAINTAINER xbf CMD echo "Hello Docker"
3、利用docker build 命令構建新的image
[root@localhost dockertest]# docker build -t hello_docker . # Sending build context to Docker daemon 2.048kB Step 1/3 : FROM alpine:latest latest: Pulling from library/alpine 9d48c3bd43c5: Pull complete Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb Status: Downloaded newer image for alpine:latest ---> 961769676411 Step 2/3 : MAINTAINER xbf ---> Running in c92d0fa7be5c Removing intermediate container c92d0fa7be5c ---> 3f3ea64dc595 Step 3/3 : CMD echo "Hello Docker" ---> Running in 6568cd66097d Removing intermediate container 6568cd66097d ---> d7cc9ec010e5 Successfully built d7cc9ec010e5 Successfully tagged hello_docker:latest [root@localhost dockertest]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello_docker latest d7cc9ec010e5 9 seconds ago 5.58MB nginx latest ab56bba91343 20 hours ago 126MB alpine latest 961769676411 3 weeks ago 5.58MB hello-world latest fce289e99eb9 8 months ago 1.84kB
4、利用docker run來運行此image
[root@localhost dockertest]# docker run hello_docker Hello Docker
第二個dockerfile
1、首先建立文件夾Docker2
2、在Docker2文件夾下建立Dockerfile文件,並編輯:
FROM ubuntu MAINTAINER root RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update && apt-get install nginx -y COPY index.html /var/www/html ENTRYPOINT ["/usr/local/nginx/sbin/nginx","-g","daemon off;"] EXPOSE 80
3、建立www/index.html文件
touch index.html Hello nginx.ubuntu
4、構建新的image。
docker build -t whr/hello-nginx /dockertest/Docker2 [root@localhost Docker2]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE whr/hello-nginx latest f6efa129cd16 2 minutes ago 149MB
5、啟動whr/hello-nginx
[root@localhost Docker2]# docker run -d -p 80:80 whr/hello-nginx
ada48aa3a8fef5e1feb35e5c90ff176f584cd69b8ad1af403de96cd883247599
Dockerfile的語法
FROM base image
RUN 執行命令
ADD 添加文件
COPY 拷貝文件
CMD 執行命令
EXPOSE 暴露視窗
WORKDIR 指定路徑
MAINTAINER 維護者
ENV 設定環境變數
ENTRYPOINT 容器入口
USER 指定用戶
VOLUME mount point
鏡像分層
Dockerfile中的每一行都會產生一個新層