------------恢復內容開始------------
引子:
我認為docker相比傳統的虛擬化技術最大的不同就是不虛擬化內核,使用共享宿主機內核的方式。通過namesapce,聯合文件系統,cgroups這三種機制分別從網絡,文件以及資源上進行隔離,通過docker鏡像快速的實現擴容,這一點在測試進行部署測試環境以及在進行分布式壓力測試的時候,比較友好。
namespace 網絡隔離空間,網絡空間空間機制,保證了網絡的隔離
聯合文件系統 每個單獨的容器都會提供一個的單獨的視圖,我們在doceker容器內只能看到自己的文件,這樣就保證了文件的隔離
cgropus 資源隔離,為每個容器申請固定的資源
但是每個容器都有通向內核的接口。
基本命令:
1 mac 安裝docker
brew cask install docker
2 基本命令
docker run ubuntu:14.04 /bin/echo 'hello world' | 使用一個容器啟動鏡像ubuntu14.04 執行程序/bin/echo |
docker run -t -i ubuntu:14.04 /bin/bash | 使用一個容器啟動鏡像ubuntu14.04 執行程序/bin/bash 交互模式 |
docker run -t -d ubuntu:14.04 /bin/sh | 使用一個容器啟動鏡像ubuntu14.04 執行程序/bin/bash 后台模式 |
docker run -t -i -d --name helloubuntu ubuntu14:04 /bin/sh -c 'while true;do echo hello world ;sleep 1; done' |
給容器起一個別名 |
docker logs docker_id/docker-names | 查看容器的啟動日志 |
docker ps docker ps -a |
查看運行的容器 |
docker stop docker_id/docker_names | 停止一個容器 |
docker start docker_id/docker_names | 啟動一個容器 |
docker restart docker_id/docker-names | 重啟一個容器 |
docker rm docker_id/docker_names docker rm $(name1,name2) docker rm $(docker ps -q -a) |
刪除容器,如果容器處於運行狀態需要加 -f參數 |
docker images | 查看所有的鏡像 |
docker run --name mycicd -p 18888:8080 jenkins | 啟動jenkins的鏡像 並設置別名為mycicd將宿主機18888端口映射到容器8080端口 |
docker pull image_name:version | 拉去docker鏡像 |
docker push image_name:version | 推送docker鏡像 |
docker tag {source_image:tag your_image_name} | 給鏡像搭上一個tag,但是docker image只是多出來一條記錄,鏡像的id是唯一標識 |
docker save busybox>busybox.tar | 打包鏡像 |
docker load <busybox.tar.gz | 導入鏡像 |
docker info | docker 信息 |
docker kill | 殺死doceker容器 |
docker exec -it docker_id /bin/bash | 進入docker容器中 |
查看容器原信息 docker inspect contain_name
宿主機查看容器運行情況 ps aux|grep jenkins
docker和宿主機之間拷貝文件
docker cp local_file_name docker_id:/file_path
運行容器執行命令
docker exec mycicd ping 192.168.1.1
掛載數據卷 持久化儲存容器內的數據和端口映射有些像,在-v 之后容器中就可以訪問到宿主機中的持久化位置
docker run -it -d -p 18888:8080 -v /root/blog:/hexo --name hexo hexo3
交互模式
打包鏡像:
docker build -t image_name/port .