基礎命令學習
1,docker search centos ##搜索鏡像文件
2,docker pull centos ##下載鏡像
3,docker images ##查看鏡像
4,docker run centos /bin/echo 'hello world' ##啓動一個容器
5,docker ps -a ##查看容器包括啓動和停止的容器
6,docker run --name mydocker -it centos /bin/bash ##進入容器內部
7, ip ad li ##查看ip地址
8,docker run -d --name mydocker centos ##後臺啓動容器
9,nsenter(yum -y install util-linux進行安裝) ##使用這個命令通過容器 PID進入容器
docker inspect --format "``.`State`.`Pid`" mydocker(名稱或容器ID) 3575 ##取得容器的PID號
10,nsenter --target 3575 --mount --uts --ipc --net --pid ##進入容器
進入容器腳本:
#!/bin/bash
CNAME=$1
CPID=`docker inspect --format "``.`State`.`Pid`" $CNAME`
nsenter --target "$CPID" --mount --uts --ipc --net --pid
網絡訪問:
1, brctl show ##會發現一個docker0的網橋
2, ip ro li ##查看路由
3,網絡端口映射:
隨機映射:
docker -d -P --name mynginx nginx
docker ps -l##查看最近的一個容器操作
onds 0.0.0.0:32769->80/tcp,0.0.0.0:32768->443/tcp mynginx ##容器的80端口映射到物理機的32769
指定映射:
docker -d -p 91:80 --name mynginx1 nginx ##91是映射後的端口,80是容器裏的默認端口
-p ip:hostPort:containerPost ##ip地址端口+容器端口
-p ip::containerPort ##iP+容器的端口
-p hostPort:containerPort -p hostPort:containerPor ##指定多個端口
docker數據管理:
數據卷:-v /data
docker run -it --name volume-test1 -h centos -v /data centos ##在容器裏會生成一個/data 目錄
docker inspect -f ``.`Volumes` volume-test1 ##查看數據目錄映射關係
指定目錄:-v src:dst
docker run -it --name volume-test2 -h centos -v /opt:/opt(:ro只讀) centos ##物理機的/opt映射到容器的/opt
docker run -it --rm centos ##此鏡像爲測試鏡像關閉後自動清楚
數據卷容器:
docker run -it --name volume-test3 --volumes-from volume-test1 centos ##指定容器1,爲數據卷
docker鏡像構建:
手動構建:
1,nginx 加daemon off; 關閉nginx的後臺運行,並設置開機自啓/etc/rc.d/rc.local
2,docker commit -m "my_nginx" 023d0bc923a9 dihaifeng/my_nginx:v1 ##將容器製作成鏡像
3,docker run -d -p 99:80 dihaifeng/my_nginx:v1 /usr/local/nginx/sbin/nginx
dockfile:
1,基礎鏡像信息 2, 維護者的信息 3,鏡像操作指令 4,容器啓動時執行指令
1,創建dockerfile的目錄
mkdir -p /opt/docker-file/nginx
vim Dockerfile ##docker的D必須大寫
Dockerfile指令:
FROM:它的媽媽是誰(基礎鏡像)
MAINTAINER:告訴別人,你創造了它(維護者信息)
ADD:往它肚子裏放點文件(COPY文件,會自動解壓,必須和dockerfile放在一個目錄裏)
RUN:你想讓它幹啥(把命令前面加上RUN)
WORKDIR:我是cd,今天剛化了妝(當前工作目錄)
VOLUME:給我一個存放行李的地方(目錄掛載)
EXPOSE:我要打開的門是啥(端口)
RUN:奔跑吧,兄弟!(進程要一直運行下去)
配置dockerfle的環境變量:
ENV PATH=/usr/local/nginx/sbin:$PATH
CMD ["nginx"]
docker build -t nginx-file:v1 /opt/docker-file/nginx/ ##自動構建dockerfile
docker核心技術:
docker資源隔離:使用Linux的LXC,使用Kernel namespace(命名空間:Pid、net、IPC、mnt、uts、user)
docker資源限制:使用cgroup,支持CPU、內存
壓力測試的工具:stress
CPU測試:
docker run -it --rm stress --cpu 1 ##開一個容器測試cpu佔用率
docker run -it --rm -c 512 stress -cpu 1 ##有幾個CPU指定幾,cpu配額測試,不指定默認是對半分
docker run -it --rm --cpuset-cpus=0,1 stress --cpu 2 ##只會佔用一個CPU
內存測試:
docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0
docker網絡模式:默認是橋接模式。 docker-compose ##構建多個鏡像
docker-registry私有倉庫:
docker pull registry
docker run -d -p 5001:5000 registry ##registry默認是5000端口
docker tag nginx 192.168.10.110:5001/test/nginx:v1 ##打標籤
docker push 192.168.10.110:5001/test/nginx:v1 ##打完標籤可以push到私有倉庫中,新版本會報錯,要使用https的方式,
修改/etc/sysconfig/docker ---> other_args="--insecure-registry 192.168.10.110:5001" 重新啓動docker ,就可以push了。
docker dashboard (shipyard):
1,vim /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" ##容器之間通信
/etc/init.d/docker restart #重新加載docker
2,安裝shipyard
docker run -it -d --name shipyard-rethinkdb-data --entrypoint /bin/bash shipyard/rethinkdb -l