您的位置:首页 > 运维架构 > Docker

(?)企业部分之docker

2016-07-26 22:48 956 查看
使用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 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 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 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
添加以下内容:
[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 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
将内容修改为以下:
[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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: