(?)企業部分之docker

使用redhat7.2的鏡像更新內核至3.10.0-327.el7.x86_64        ##版本相差過大可能需要yum update 更新所有纔可以成功更新


關閉SElinux和防火牆

所需軟件包:docker-engine-1.10.3-1.el7.centos.x86_64.rpm  docker-engine-selinux-1.10.3-1.el7.centos.noarch.rpm

rpm -ivh docker-engine-1.10.3-1.el7.centos.x86_64.rpm  docker-engine-selinux-1.10.3-1.el7.centos.noarch.rpm     ##安裝docker
systemctl start docker
docker version    ##查看docker版本

wKioL1eXedLQqcJEAABeFDg204k327.png


docker info    ##顯示docker系統的信息


##加載平臺鏡像##

docker load -i rhel7.tar    ##加載鏡像
docker images    ##列出鏡像

wKioL1eXeijBToW6AAAgNgJUdFE968.png


docker search rhel7    ##檢索鏡像(貌似連網檢索)
docker rmi rhel7    ##刪除鏡像
docker history rhel7    ##顯示一個鏡像的歷史


##運行docker容器##

docker run --rm rhel7 cat /etc/hosts    ##一次性運行一個容器。非交互式在容器中運行命令,運行後刪除容器
docker run -it rhel7 bash    ##交互式運行容器

wKiom1eXekuDUbZlAAAoudCdZ_E713.png


ctrl+p+q    ##退出,並使容器保持運行狀態
ctrl+d/exit    ##退出,並關閉容器

容器可通過docker ps來查看

docker ps    ##可查看正在運行的容器
docker ps -a    ##可查看所有容器

wKioL1eXemvD1ZLdAAAqgqwybvA528.png


docker start 09     ##啓動容器。可以用ID,也可以用名字

wKioL1eXeniSYai9AAAzwC0EVCE380.png


docker stop loving_bhaskara    ##關閉容器

wKiom1eXeozzBodBAAA_A1c5XjI730.png

#docker kill Name/ID    ##殺死一個容器
docker rm 09    ##刪除容器
docker rm `docker ps -a -q`    ##刪除所有容器



再開啓一個容器,起名爲vm1

docker run -it --name vm1 ubuntu bash
ip addr show

wKioL1eXep_hpDrpAAB06oLRMvo480.png

docker inspect vm1 | less    ##顯示容器信息
docker logs vm1        ##從一個容器中取日誌,顯示在容器中運行的命令及結果
docker stats vm1    ##顯示容器CPU、內存的等狀態
docker attach vm1    ##附加到一個運行的容器上面

wKiom1eXeq7j-ElyAACh4FArbfA442.png

docker diff vm1        ##它只顯示初始狀態與最終狀態的變化,而不會顯示中間過程的變化。列出一個容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增加的,D 刪除的,C 被改變的
docker restart vm1    ##重啓容器
docker top vm1        ##顯示一個運行的容器裏面的進程信息
docker pause vm1    ##不允許交互

wKioL1eXeuTyhH4uAAA6n5DZJzs400.png


docker unpause vm1    ##允許交互
docker export vm1 > vm1.tar    ##將容器導入到tar包

wKiom1eXewCRbRHiAAApa1kNuWc671.png


docker import vm1.tar vm1    ##將tar包導入到鏡像中

wKioL1eXexKCF8F3AAB53nOKQ2s996.png


docker cp vm1:/mnt .    ##拷貝容器下的文件到本地
docker run -it --name vm1 centos bash    ##配置一個yum源

wKioL1eXe3Wz27P-AAB3ACLk-qE760.png


docker commit -m "yum" -p vm1 centos:yum    ##提交對容器的修改,保存對容器的修改

wKiom1eXe4bT0iNXAAB9obTS0LM448.png


docker save centos:yum > yum.tar    ##將鏡像導入到包中

wKioL1eXe5mC2sd1AAAs2X4ti6k002.png


docker run -it --name yumtest centos:yum bash    ##新建的容器有yum源

wKiom1eXe6zR5s2sAAA_LbfL57A451.png


##掛載##

docker run -it --name vm1 -v /mnt/data1:/data1 rhel7 bash    ##將/mnt/data1目錄掛載在容器的/data1下,目錄沒有會自動建立

wKioL1eXe--wBDhcAAAYlHoTyZg851.png


docker create --name data -v /mnt/sharedata:/sharedata rhel7 bash    ##公共掛載

wKiom1eXfA_yFkpfAAAWomGwYn0998.png


docker run -it --name vm1 --volumes-from data rhel7 bash

wKiom1eXfFLQZfq4AAAUYstWIac250.png


docker run -it --name vm1 -v /mnt/data1:/data1 -v /mnt/data2:/data2 rhel7 bash    ##建立多個掛載點

wKioL1eXfFOwZsjtAAAlfTomXYE571.png


docker run --rm --volumes-from data -v /mnt/data:/data rhel7 tar cf /data/data.tar /sharedata    ##報錯。是因爲沒有tar命令

wKioL1eXfJHT2SB7AAAr94K0vXE070.png


docker run -it --name vm1 -v /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash    ##將虛擬機的yum倉庫配置共享給容器

wKiom1eXfKWiOXReAABY7OY_7lQ148.png

yum install tar


docker commit -p vm1 rhel7:tar
docker run --rm --volumes-from data -v /mnt/data:/data rhel7:tar tar cf /data/data.tar /sharedata    ##將/sharedata目錄打包在虛擬機/mnt/data/下,命名爲data.tar


查看虛擬機的/mnt/data目錄,可以看到data.tar文件



容器的四種連接方式:橋接 host none container


##修改容器的IP地址##

systemctl stop docker
ip link set dev docker0 down

wKioL1eXfMDRJk8gAAAqYp16Rx0457.png


ip addr del 172.17.0.1/16 dev docker0
ip addr add 172.17.0.1/24 dev docker0
ip link set dev docker0 up

wKiom1eXfNyyhT4iAAA9CO6UoqQ983.png


cp /lib/systemd/system/docker.service /etc/systemd/system
vim /etc/systemd/system/docker.service

在[Service]下的ExecStart的最後添上以下內容:
--bip 172.17.0.1/24
wKioL1eXfOnh7Z4RAAA360DbFGw731.png


systemctl daemon-reload
systemctl start docker

2.host

docker run -it --name vm1 --net host nginx bash
ip addr show         ##沒有此命令,需要裝包iproute

wKioL1eXfPzTkZV6AAEmrxxf_xU993.png


此時IP和虛擬機相同,容易導致資源的爭搶與佔用。(如端口的佔用)

關閉虛擬機的80端口

開啓虛擬機的nginx服務

/etc/init.d/nginx start


此時虛擬機的80端口也開啓,被容器佔用

wKiom1eXfSnCpFUvAADEliAkyWQ643.png



wKiom1eXfTGDwiYZAAB8x9DxWBU591.png



3.container

docker run -it --name vm1 ubuntu bash    ##開啓一個vm1容器
docker run -it --name vm2 --net container:vm1 ubuntu bash    ##和vm1共享資源,共同佔用端口

wKioL1eXh22CD2-uAAB1_AGbJRQ740.png

IP及端口情況同vm1



4.none

docker run -it --name vm1 --net none ubuntu bash    ##無I

wKioL1eXfa_D9xoJAABOn6otWMs070.png


ip netns add test
ip netns list
cd /var/run/netns/

wKioL1eXfengnQTfAAAlisnCmOU821.png

ip netns del test
docker inspect vm1 | grep Pid

wKiom1eXfgCzmPvbAAAenMs3G4s589.png


或 

docker inspect -f '``.`State`.`Pid`' vm1

wKioL1eXfhWgrNgbAAAQu7bAr9U370.png


cd /proc/7196/ns/
ll

wKiom1eXfifSWJbkAAB99XAAbI4399.png


ln -s /proc/7196/ns/net /var/run/netns/7196
ip netns list

wKioL1eXfkTRXr_gAAAK5SJJ3gM252.png


ip link add veth0 type veth peer name veth1


wKiom1eXfkfQOYC2AAA4Pff3GFI205.png

brctl addif docker0 veth0

wKioL1eXfkehBe7gAAAva68QpSk215.png

ip link set veth1 netns 7196
ip netns exec 7196 ip link set veth1 name eth0

wKiom1eXfmiB6NC8AAAhx1vtCBk475.png


ip netns exec 7196 ip link set eth0 up
ip netns exec 7196 ip addr add 172.17.0.45/24 dev eth0
ip netns exec 7196 ip route add default via 172.17.0.1
ip link set veth0 up

wKioL1eXfqGzpws8AABARwUah-g698.png

wKioL1eXfniQL8bxAACIbaDLqiM791.png

wKiom1eXf-jxOOdbAABARwUah-g061.png


wKioL1eXf-qynqXpAABMJmyEws4222.png


docker run -P --name vm1 -d nginx    ##後臺運行容器vm1,-P隨即指定端口

wKioL1eXf-yTZTsJAABJpROBFfY830.png

curl localhost:32769

wKiom1eXf-7SnAm0AACnelzEj78283.png

iptables -t nat -nL

wKioL1eXgHrQibhGAAEGY72ZZr0244.png


docker run -p 8080:80 -p 8081:443 --name vm1 -d nginx    ##-p自主指定端口號

wKiom1eXgHvwzNCAAABJ4h341IY444.png

iptables -t nat -nL

wKioL1eXgHvBBq10AAEDz3GuOKI306.png

curl 172.25.254.45:8080

wKiom1eXgHzwAW2EAADANa7wED8217.png


docker load -i redis.tar
docker run -d --name nosql redis
docker run --name webserver -it --link nosql:db nginx bash

wKiom1eXgOXzpVLVAABWv-twJqM334.png


wKiom1eXgUqio8idAAB5Eql3vUY555.png


wKioL1eXgUvzlzzMAABvxq4Ck20505.png


cd ~/Desktop
mkdir test    ##該目錄下不要有其他的文件
vim Dockerfile

編輯以下內容:
FROM centos:yum
MAINTAINER [email protected]
ENV HOSTNAME server1
EXPOSE 80
RUN yum install -y httpd & yum clean all
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

docker build -t centos:apache .docker run -d --name web -p 8080:880 centos:apache

wKiom1eXgZKAv12iAABKDoVhke0551.png


wKioL1eXgZOBIGBxAAAciNAC0c4203.png


vim Dockerfile

編輯以下內容:
FROM centos:yum
MAINTAINER [email protected]
ENV HOSTNAME server1
EXPOSE 80
RUN yum install -y httpd & yum clean all
ADD index.html /var/www/html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]


vim index.html

編輯以下內容:
<h1>www.westos.org</h1>

docker build -t centos:html .

wKiom1eXgeiwW2crAABN5KMySGw194.png


docker run -d --name vm1 -p 8080:80 centos:html

wKioL1eXgefhC8e3AABEXC7ok_s594.png



http://172.25.254.145:8080/
wKioL1eXgejR_Q0gAAA1vI7KRao698.png



【有網】
1.
方法一:

docker run -it --name vm1 centos:6 bash     ##有yum源
yum install -y openssh-server
/etc/init.d/sshd start
netstat -antlp     ##22號端口打開
echo root:westos | chpasswd


##誤刪ssh文件##

/etc/init.d/sshd stop
cd /etc/ssh/
rm -f ssh_host_*
/usr/sbin/sshd -D    ##缺什麼文件

wKioL1eXgjTCfcwFAAAbsuVcrmk133.png


ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -q -N ""
ls /etc/ssh/

wKiom1eXgjSBGkMQAAAgvpoLanc127.png


####

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6.8.noarch.rpm
yum install -y redis
yum install -y supervisor


方法二:

cd ~/Desktop/test
rm -f index.html
vim Dockerfile        ##可能有錯,二次運行

將內容修改爲以下:
FROM centos:6
MAINTAINER [email protected]
RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6.8.noarch.rpm
ADD index.html /var/www/html
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

docker build -t centos:rpm .



2.

cd ~/Desktop/test
vim Dockerfile        ##可能有錯,二次運行

將內容修改爲以下:
FROM centos:rpm
MAINTAINER [email protected]
EXPOSE 22 6379
RUN echo root:westos | chpasswd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -q -N ""
CMD ["/usr/sbin/supervisord"]

vim supervisord.conf

添加以下內容:
[supervisord]
nodaemon=true

[program:ssh]
command=/usr/sbin/sshd -D

[program:redis]
command=/usr/sbin/redis-server

docker build -t centos:v1 .
docker inspect centos:v1
docker run -d -p 8022:22 -p 6379:6379 --name redis centos:v1
ssh -p 8022 172.25.254.145        ##可以連接
redis-cli

redis 127.0.0.1:6379>ping
PONG
redis 127.0.0.1:6379>stats
...


3.

cd ~/Desktop/test
vim Dockerfile

將內容修改爲以下:
FROM centos:lamp
MAINTAINER [email protected]
EXPOSE 22 80 3306
#這裏使用的centos:lamp已進行了包的安裝等,故註釋掉此句
#RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6.8.noarch.rpm
#RUN yum install -y openssh-server supervisor wordpress php php-mysql httpd mysql-server && yum clean all
RUN echo root:westos | chpasswd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -q -N ""
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -q -N ""

RUN service mysqld start && mysqladmin -uroot password westos && mysql -uroot -pwestos -e "create database wordpress;" && mysql -uroot -pwestos -e "grant all on wordpress.* to wjl@localhost identified by 'westos';" && service mysqld stop

RUN sed -i 's/database_name_here/wordpress/g' /etc/wordpress/wp-config.php
RUN sed -i 's/username_here/wjl/g' /etc/wordpress/wp-config.php
RUN sed -i 's/password_here/westos/g' /etc/wordpress/wp-config.php
RUN sed -i 's/127.0.0.1/all/g' /etc/httpd/conf.d/wordpress.conf

COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"]

vim supervisord.conf

將內容修改爲以下:
[supervisord]
nodaemon=true

[program:ssh]
command=/usr/sbin/sshd -D

[program:httpd]
command=/usr/sbin/httpd

[program:mysqld]
command=/usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock


docker build -t centos:v1 .
docker run -d --name lamp -p 8080:80 -p 8022:22 centos:v1
docker ps

172.25.254.145:8080/wordpress/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章