shanghaipc 发表于 2018-5-29 09:08:32

(?)企业部分之docker

  使用redhat7.2的镜像更新内核至3.10.0-327.el7.x86_64      ##版本相差过大可能需要yum update 更新所有才可以成功更新
  
关闭SElinux和防火墙
所需软件包:docker-engine-1.10.3-1.el7.centos.x86_64.rpmdocker-engine-selinux-1.10.3-1.el7.centos.noarch.rpm

rpm -ivh docker-engine-1.10.3-1.el7.centos.x86_64.rpmdocker-engine-selinux-1.10.3-1.el7.centos.noarch.rpm   ##安装dockersystemctl start dockerdocker 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 baship 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:tardocker 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 dockerip 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  在下的ExecStart的最后添上以下内容:
--bip 172.17.0.1/24

  

systemctl daemon-reload
systemctl start docker  2.host

docker run -it --name vm1 --net host nginx baship 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 testip netns listcd /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 wjl1994@163.com
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 wjl1994@163.com
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 startnetstat -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.htmlvim Dockerfile      ##可能有错,二次运行  将内容修改为以下:
FROM centos:6
MAINTAINER wjl1994@163.com
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 wjl1994@163.com
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  添加以下内容:

nodaemon=true

command=/usr/sbin/sshd -D

command=/usr/sbin/redis-server

docker build -t centos:v1 .docker inspect centos:v1docker run -d -p 8022:22 -p 6379:6379 --name redis centos:v1ssh -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 wjl1994@163.com
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  将内容修改为以下:

nodaemon=true

command=/usr/sbin/sshd -D

command=/usr/sbin/httpd

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:v1docker ps  172.25.254.145:8080/wordpress/
页: [1]
查看完整版本: (?)企业部分之docker