1 $ sudo yum install -y yum-utils \ # 安裝依賴 2 device-mapper-persistent-data \ 3 lvm2 4
5 $ sudo yum-config-manager \ # 安裝配置管理 6 --add-repo \ 7 https://download.docker.com/linux/centos/docker-ce.repo
8
9 $ sudo yum-config-manager --enable docker-ce-nightly 10 $ sudo yum-config-manager --enable docker-ce-test 11
12 $ sudo yum install docker-ce docker-ce-cli containerd.io 13
14 $ sudo systemctl start docker # 啓動docker 15 $ sudo systemctl status docker # 查看docker狀態 16 $ sudo docker run hello-world # 運行hello-world 17 $ sudo docker images hello-world 18
19 $ sudo docker run hello-world # 使用hello-world測試安裝是否成功 20
21 $ sudo systemctl enable docker # 開機啓動
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \
docker-ce
$ sudo rm -rf /var/lib/docker
最經常使用的docker客戶端:docker,也可經過REST API與服務器通訊;html
安裝compose(Docker-Compose是一個能夠自動化的腳本工具。)python
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
vim docker-compose.yml
wordpress:
systemctl status docker.service # 查看docker狀態
systemctl daemon-reload # 重啓docker daemon
systemctl restart docker.service # 重啓docker服務 docker -H 192.168.1.2 info # -H參數可與遠程服務器通訊 vim /etc/systemd/system/multi-user.target.wants/docker.service # 默認配置下,Docker daemon 只能響應來自本地 Host 的客戶端請求;容許遠程客戶端請求,須要在配置文件中打開 TCP 監聽
ExecStart/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0
docker run -d -p 80:80 httpd # 啓動 httpd 容器,並將容器的80端口映射到 host 的80端口
docker run -d -p 8080:80 httpd # 8080是host端口,80是images端口
docker images # 查看下載到本地的鏡像 docker images httpd # 查看httpd鏡像信息 docker ps 或者 docker container ls # 顯示當前運行容器
CLI或API啓動、中止、移動或刪除容器mysql
docker pull # 從Registry下載鏡像 docker pull hello-world # 用來驗證docker是否安裝成功 docker pull centos # 下載centos base鏡像 docker images centos # 查看鏡像信息
docker run # 下載鏡像並啓動容器 docker run hello-world # 運行hello-world docker run centos pwd # 直接運行命令 docker run -it centos # 啓動並進入 CentOS 容器(互動模式) docker run haproxy # 可研究負載均衡軟件HAProxy docker run django # 學習使用django開發python web應用 docker run -it centos # 運行容器。(-it以交互模式進入容器) docker run -it 22d31cc52b3e # 對鏡像進行調試 docker run centos-nmap:v1.0 yum install -y nmap # 爲鏡像安裝nmap
docker start ContainerID # 啓動容器 docker ps # 查看運行的容器,並得到names docker commit names mycentos # 建立爲新鏡像(官方不建議) docker run -tdi --privileged centos init # 其中centos爲鏡像,不是名稱 docker build -t centos-vi. # 建立新鏡像,官方推薦,-t命名,命令末尾的.指明build context爲當前目錄。 docker build --no-cache -t mycentos # 構建鏡像時不使用緩存 docker history mycentos # 顯示鏡像的構建歷史 docker rmi debian:tag # 刪除host中的鏡像,只有最後一個tag被刪除才真被刪除 docker rm containerID # 刪除container docker search httpd # 搜索hub中的鏡像 docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q ) # 查詢依賴 docker ps -a # 查看全部Container
docker tag mycentos mycentos:0.0.1 # 給鏡像打tag
docker login -u 13366969672 # 登陸docker hub docker tag httpd 13366969672/httpd # 修改鏡像的registry docker push 13366969672/httpd # 上傳鏡像至docker hub
搭建本地registry說明,請點擊我linux
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2 # 運行本身的registry docker tag 133/httpd:v0.1 hostname:5000/133/httpd:v0.1 # 重命名鏡像使之與registry匹配 docker push hostname:5000/133/httpd:v0.1 # 上傳鏡像至本地registry docker pull hostname:5000/133/httpd:v0.1 # 從本地registry下載鏡像 docker images hostname:5000/133/httpd:v0.1 # 查看鏡像
registry安全傳輸https特性:請點擊我 git
docker run -d centos /bin/bash -c "while true; do sleep 1;done" # 後臺長期運行容器 docker stop fe39cc2ccc8b # 中止一個容器 docker run --name "my_http_server" -d httpd # 啓動容器並命名爲my_http_server,-d爲後臺運行
docker run -d centos /bin/bash -c "while true; do sleep 1; echo I_am_in_container;done" # 獲取長ID docker attach 長ID # 進入容器命令終端,ctrl +p or +q退出 docker exec -it ID bash # 進入容器命令終端 docker exec -it <container> bash|sh # 經常使用格式,exit退出
docker logs -f ID # 查看啓動命令的輸出
docker (start stop kill restart pause) ContainerID # 啓動、中止、殺死、重啓、暫停容器 docker stop $(docker ps -a -q) # 中止全部container docker rm $(docker ps -a -q) # 刪除全部container docker rm -v $(docker ps -aq -f status=exited) # 刪除全部退出的container docker rmi $(docker images -q) # 刪除全部images docker run -d --restart=always httpd # 重啓容器,stop或kill的不重啓 docker run -d --restart=failure:3 httpd # 重啓容器最多3次 docker pause names # 暫停容器 docker unpause names # 恢復運行
docker create # container處於created狀態
docker start # 後臺啓動容器
docker run # 是create和start的組合
docker run -m 200M --memory-swap=300M centos # 設置內存+swap進行限額,默認沒有限制;只有內存,沒有內存+swap時,默認後者是兩倍 docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M # images對容器進行壓力測試
docker run --name "container_A" -c 1024 centos # 設置CPU share docker run --name container_A -it -c 1024 progrium/stress --cpu 1 docker run --name container_B -it -c 512 progrium/stress --cpu 1 # 進行壓力測試,使用top查看
docker run -it --name container_A --blkio-weight 600 centos docker run -it --name container_B --blkio-weight 300 centos # 設置blkio-weight,默認500,磁盤的讀寫帶寬
bps 是 byte per second,每秒讀寫的數據量。iops 是 io per second,每秒 IO 的次數
docker run -it --device-write-bps /dev/sda:30M centos # 限制容器/dev/sda的速率爲30M/s time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct # 測試硬盤讀寫
cgroup 實現資源限額, namespace 實現資源隔離( 六種資源:Mount、UTS、IPC、PID、Network 和 User )github
docker run -it --cpu-shares 512 progrium/stress -c 1 docker ps # 查看短ID ls /sys/fs/cgroup/cpu/docker/短ID Tab # 查看cpu.shares設置 /sys/fs/cgroup/memory/docker/短ID Tab /sys/fs/cgroup/blkio/docker/短ID Tab
docker run -h myhost -it centos # 設置容器的主機名
docker network ls # 查看docker網絡 docker run -it --network=none centos # 容器指定使用none網絡(什麼都沒有的網絡) docker run -it --network=host centos # 指定host網絡,配置與主機徹底一致,使用ip l yum install bridge-utils # 安裝brctl brctl show # 查看網橋 docker network inspect bridge # 查看網橋配置信息
user-defined 網絡驅動:bridge, overlay 和 macvlan。overlay 和 macvlan
docker network create --driver bridge my_net # 建立默認的bridge網絡 docker network inspect my_net # 查看剛建立網橋 docker network create --driver bridge --subnet 10.113.0.0/24 --gateway 10.113.0.1 my_net # 爲本身建立的網橋指定網段,只有使用 --subnet 建立的網絡才能指定靜態 IP docker run -it --network=my_net centos # 使用新的網絡 docker run -it --network=my_net --ip 10.113.0.2 centos # 配置靜態ip地址 ip r # 查看路由信息 sysctl net.ipv4.ip_forward # 查看轉發是否啓用,1爲啓用 iptables-save # 查看防火牆 docker network connect my_net centos短ID # 爲centos添加一塊my_net網卡
docker run -it --network=my_net2 --name=bbox1 busybox docker run -it --network=my_net2 --name=bbox2 busybox # 爲容器命名,並實現網絡通
docker DNS 有個限制:只能在 user-defined 網絡中使用
docker run -it --network=container:web1 centos # 經過--network=container:web1 指定 jointed 容器爲 web1 dcoker exec -it web1 bash ip a # 查看web1的網絡 35章 joined容器能夠使兩個或多個容器共享一個網絡棧,共享網卡和配置信息,joined 容器之間能夠經過 127.0.0.1 直接通訊 docker run -it --network=container:web1 mycentos # 指定用joined容器 iptables -t nat -S # 查看防火牆NAT配置 tcpdump -i docker0 -n icmp # 監控網卡數據包 docker port 8a6d08d05557 # 查看端口映射 docker run -d -p 80:80 -v ~/htdocs:/usr/local/apache2/htdocs httpd # 將$HOME/htdocs mount到容器上 docker inspect containerID # 查看容器信息 docker volume ls # 查詢volume name docker volume inspect 'volume name' # 查看volume docker cp /home/index.html containerID:/usr/local/apache2/htdocs # 容器與host之間拷貝數據 volume container 是專門爲其餘容器提供 volume 的容器 docker create --name vc-data /home/jinbian/var/vc-data:/usr/local/httpddata -v /var/useful/vc-data mycentos # 建立volume container docker inspect vc-data # 查看volume container docker run --name web1 -d -p 80 --volumes-from vc-data httpd # 容器啓動並使用vc-data docker volume ls # 查看數據 docker volume rm id # 刪除數據
指令導圖web