使用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版本
docker info ##顯示docker系統的信息
##加載平臺鏡像##
docker load -i rhel7.tar ##加載鏡像
docker images ##列出鏡像
docker search rhel7 ##檢索鏡像(貌似連網檢索)
docker rmi rhel7 ##刪除鏡像
docker history rhel7 ##顯示一個鏡像的歷史
##運行docker容器##
docker run --rm rhel7 cat /etc/hosts ##一次性運行一個容器。非交互式在容器中運行命令,運行後刪除容器
docker run -it rhel7 bash ##交互式運行容器
ctrl+p+q ##退出,並使容器保持運行狀態
ctrl+d/exit ##退出,並關閉容器
容器可通過docker ps來查看
docker ps ##可查看正在運行的容器 docker ps -a ##可查看所有容器
docker start 09 ##啓動容器。可以用ID,也可以用名字
docker stop loving_bhaskara ##關閉容器
#docker kill Name/ID ##殺死一個容器
docker rm 09 ##刪除容器
docker rm `docker ps -a -q` ##刪除所有容器
再開啓一個容器,起名爲vm1
docker run -it --name vm1 ubuntu bash
ip addr show
docker inspect vm1 | less ##顯示容器信息
docker logs vm1 ##從一個容器中取日誌,顯示在容器中運行的命令及結果
docker stats vm1 ##顯示容器CPU、內存的等狀態
docker attach vm1 ##附加到一個運行的容器上面
docker diff vm1 ##它只顯示初始狀態與最終狀態的變化,而不會顯示中間過程的變化。列出一個容器裏面被改變的文件或者目錄,list列表會顯示出三種事件,A 增加的,D 刪除的,C 被改變的
docker restart vm1 ##重啓容器
docker top vm1 ##顯示一個運行的容器裏面的進程信息
docker pause vm1 ##不允許交互
docker unpause vm1 ##允許交互
docker export vm1 > vm1.tar ##將容器導入到tar包
docker import vm1.tar vm1 ##將tar包導入到鏡像中
docker cp vm1:/mnt . ##拷貝容器下的文件到本地
docker run -it --name vm1 centos bash ##配置一個yum源
docker commit -m "yum" -p vm1 centos:yum ##提交對容器的修改,保存對容器的修改
docker save centos:yum > yum.tar ##將鏡像導入到包中
docker run -it --name yumtest centos:yum bash ##新建的容器有yum源
##掛載##
docker run -it --name vm1 -v /mnt/data1:/data1 rhel7 bash ##將/mnt/data1目錄掛載在容器的/data1下,目錄沒有會自動建立
docker create --name data -v /mnt/sharedata:/sharedata rhel7 bash ##公共掛載
docker run -it --name vm1 --volumes-from data rhel7 bash
docker run -it --name vm1 -v /mnt/data1:/data1 -v /mnt/data2:/data2 rhel7 bash ##建立多個掛載點
docker run --rm --volumes-from data -v /mnt/data:/data rhel7 tar cf /data/data.tar /sharedata ##報錯。是因爲沒有tar命令
docker run -it --name vm1 -v /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash ##將虛擬機的yum倉庫配置共享給容器
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
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
cp /lib/systemd/system/docker.service /etc/systemd/system vim /etc/systemd/system/docker.service
在[Service]下的ExecStart的最後添上以下內容:
--bip 172.17.0.1/24
systemctl daemon-reload systemctl start docker
2.host
docker run -it --name vm1 --net host nginx bash
ip addr show ##沒有此命令,需要裝包iproute
此時IP和虛擬機相同,容易導致資源的爭搶與佔用。(如端口的佔用)
關閉虛擬機的80端口
開啓虛擬機的nginx服務
/etc/init.d/nginx start
此時虛擬機的80端口也開啓,被容器佔用
3.container
docker run -it --name vm1 ubuntu bash ##開啓一個vm1容器
docker run -it --name vm2 --net container:vm1 ubuntu bash ##和vm1共享資源,共同佔用端口
IP及端口情況同vm1
4.none
docker run -it --name vm1 --net none ubuntu bash ##無I
ip netns add test
ip netns list
cd /var/run/netns/
ip netns del test docker inspect vm1 | grep Pid
或
docker inspect -f '``.`State`.`Pid`' vm1
cd /proc/7196/ns/ ll
ln -s /proc/7196/ns/net /var/run/netns/7196 ip netns list
ip link add veth0 type veth peer name veth1
brctl addif docker0 veth0
ip link set veth1 netns 7196 ip netns exec 7196 ip link set veth1 name eth0
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
docker run -P --name vm1 -d nginx ##後臺運行容器vm1,-P隨即指定端口
curl localhost:32769
iptables -t nat -nL
docker run -p 8080:80 -p 8081:443 --name vm1 -d nginx ##-p自主指定端口號
iptables -t nat -nL
curl 172.25.254.45:8080
docker load -i redis.tar docker run -d --name nosql redis docker run --name webserver -it --link nosql:db nginx bash
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
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 .
docker run -d --name vm1 -p 8080:80 centos:html
http://172.25.254.145:8080/
【有網】
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 ##缺什麼文件
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/
####
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/