Docker
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker相关的知识,希望对你有一定的参考价值。
一、Docker
1.什么是容器
--容器技术是应用程序封装和交付的核心技术
--容器技术的核心:资源管理、进程隔离、selinux安全
--由于是在物理机上实施隔离,启动一个容器可以像启动一个进程一样快速
2.什么是docker
Docker: 是完整的一套容器管理系统,提供了一组命令,让用户更加方便的直接地使用容器技术,而不需要过多关心底层内核技术
容器和虚拟化的比较:
优点:相比于传统的虚拟化技术,容器更加简洁高效,传统虚拟机需要给每个VM安装操作系统,容器使用共享公共库和程序
缺点:容器的隔离性没有虚拟化强;共用linux内核,安全性有先天缺陷,监控容器和容器排错是挑战
3.安装docker
#----------------------物理机--------------------------#
创建一台 4G 内存的虚拟机
创建虚拟机硬盘
qemu-img create -b node.qcow2 -f qcow2 docker1.img 20G
创建虚拟机配置文件
sed ‘s/node/docker1/‘ node.xml >/etc/libvirt/qemu/docker1.xml
定义虚拟机
virsh define /etc/libvirt/qemu/docker1.xml
编辑虚拟机修改内存
virsh edit node1
启动虚拟机
virsh start node1
创建自定义 yum 源
拷贝 docker-engine* /var/ftp/public
cd /var/ftp/public
createrepo .
#--------------------虚拟机--------------------#
修改主机名和静态 ip 地址
echo docker1 >/etc/hostname
配置静态 ip 地址 /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO="static"
IPADDR="192.168.1.11"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"
配置 /etc/yum.repos.d/docker.repo
[local_docker]
name=CentOS docker
baseurl="ftp://192.168.1.254/docker"
enabled=1
gpgcheck=0
安装 docker
yum install docker-engine
设置开机自启动
systemctl enable docker
重启虚拟机
reboot
docker version //查看版本
4.docker镜像
docker镜像是启动容器的核心(模板),采用分层设计,使用快照cow技术,确保底层数据不丢失
5.docker 命令
docker images //查看镜像
docker search 镜像名 //搜索镜像
docker pull 镜像名 //下载镜像
docker push 镜像名 //上传镜像
docker help pull //产看命令pull 的帮助
docker history 镜像名 //查看镜像制作历史
docker rmi 镜像名 //删除本地镜像,启动容器时删除会报错,要把该镜像启动的所有容器都删除才能删除成功
docker rm 容器ID //删除容器
docker tag centos:latest centos1:latest1 //修改镜像名和标签(相当于复制,镜像ID号是相同的)
docker stop 容器ID //关闭容器
docker start 容器ID //启动容器
docker restart 容器ID //重启容器
#docker rm $(docker ps -aq) //删除所有容器
docker save busybox:latest >busybox.tar //备份镜像
docker load < busybox.tar //恢复镜像(在另一台机器上恢复)
docker top 容器ID //查看容器进程列表(可以查看容器里执行过哪些命令)
docker inspect 容器ID //查看容器底层信息
#docker inspect -f "{{.NetworkSettings.IPAddress}}" 67 //查看容器IP地址
启动容器:
docker run -it 镜像名:标签 镜像里的命令 //i表示交互,t表示分配一个终端
每次执行docker run 都会创建一个全新的容器
docker ps [-aq] //查看启动的(所有的)容器
#docker run -it centos /bin/bash //启动容器后启动容器里的bash 命令
#docker run -it centos //启动容器默认的命令
#docker run -it centos /bin/echo hello //启动容器echo hello后容器小时
docker run -d nginx //以后台进程的方式启动nginx容器,因为nginx 是一个服务,所以要以后台服务的方式启动
docker run -it nginx /bin/bash //前台方式,给它一个可交互式的终端
docker exec -it 7e4e bash //相当于ssh进入容器
docker attach 7e4e //相当于console进入容器
6.启动一个nginx镜像,并修改nginx页面
#docker run -d nginx
#docker ps //查看容器ID
#docker exec -it 275 /bin/bash //进入容器
#dpkg -L nginx 或 nginx -T | grep root //查看nignx 配置文件路径
#cd /usr/share/nginx/html
#cat >index.html <<EOF
hello //把主页面修改为hello
EOF
#exit
#docker inspect -f "{{.NetworkSettings.IPAddress}}" 275 //查看容器IP地址
#curl http://172.17.0.2
二、自定义镜像
1.创建容器
#docker run -it centos
2.修改配置,安装软件
在容器搭建yum源,安装软件包
#exit
3.创建镜像
#docker ps -aq
#docker commit 容器ID 镜像名称:标签
4.查看镜像,使用新的镜像创建容器
#docker images
#docker run -it 镜像名
三、Dockerfile
新建一个目录,目录下新建Dockerfile文件
1.封装初始化环境
#vim Dockerfile
FROM centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum install -y net-tools psmisc vim-enhanced
:wq
#docker build -t 新镜像名:新标签名 . //“.”代表Dockerfile文件所在路径,在当前目录下就用.表示
2.修改镜像的默认启动命令
FROM myos:latest
CMD ["/usr/bin/python"]
3.封装ssh应用
FROM myos
RUN yum install -y openssh-server
RUN echo 11 | passwd --stdin root
RUN sshd-keygen
ENV EnvironmentFile=/etc/sysconfig/sshd
CMD ["/usr/sbin/sshd","-D"]
4.封装httpd应用
FROM myos
RUN yum -y install httpd
WORKDIR /var/www/html
RUN echo "hello " > index.html
ENV EnvironmentFile=/etc/sysconfig/httpd //设置环境变量文件
EXPOSE 80 //监听80端口
CMD ["/usr/sbin/httpd", "-DFOREGROUND"] //启动服务
四、自定义镜像仓库
把一台机器的镜像共享在局域网里
步骤:
1.写json配置文件,创建私有仓库
#vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.1.11:5000"] //私有仓库的IP:端口
}
2.重启docker服务
#systemctl restart docker
3.启动私有仓库服务
#docker run -d -p 5000:5000 registry
4.打标记
#docker tag busybox:latest 192.168.1.11:5000/busybox:lastest
#docker tag myos:latest 192.168.1.11:5000/myos:latest
#docker tag myos:python 192.168.1.11:5000/myos:python
#docker tag myos:httpd 192.168.1.11:5000/myos:httpd
5.上传镜像
docker push 192.168.1.11:5000/busybox:latest
docker push 192.168.1.11:5000/myos:latest
docker push 192.168.1.11:5000/myos:python
docker push 192.168.1.11:5000/myos:httpd
6.客户机使用私有镜像源
配置daemon.json (把服务机上的该文件拷过来就行)
重启docker
启动容器
docker run -it 192.168.1.11:5000/busybox
docker run -it 192.168.1.11:5000/myos
docker run -d 192.168.1.11:5000/myos:httpd
查看私有仓库有什么样的镜像
#curl http://192.168.1.11:5000/v2/_catalog
查看私有仓库的镜像有什么样的标签
#curl http://192.168.1.11:5000/v2/myos/tags/list
五、存储卷
docker容器不保持任何数据,重要数据使用外部卷存储(数据持久化),容器可以挂载真实机目录或共享存储为卷
存储卷映射:
docker run -itd -v 物理机文件夹:容器内文件夹 镜像:标签
#docker run -it -v /var/data:/abc 192.168.1.193:5000/myos
//当在容器的abc目录里创建文件时,物理机的/var/data里也会有相应的文件
共享存储:
一台共享存储服务器可以提供给所有Docker主机使用
共享存储服务器(NAS、SAN、DAS等)
如:使用NFS创建共享存储服务器,客户端挂载NFS共享,并最终映射到容器中
服务器:
#yum -y install nfs-utils
#vim /etc/exports
/public 192.168.1.0/24(rw,root_squash)
:wq
#systemctl start nfs
Docker主机:
mount挂载共享, 运行容器时,使用-v选项映射磁盘到容器中
六、docker网络
真实网卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-eth0
虚拟网卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
网卡与虚拟交换机的区别就是TYPE=bridge
brctl show //查看虚拟交换机
创建虚拟交换机
docker network create --driver=bridge --subnet 192.168.100.0/24 docker1
创建一个新的容器,使用新的交换机
docker run -it --network=docker1 myos
端口复用:
创建容器,使用宿主机的端口 -p 宿主机端口:容器端口
docker run -d -p 80:80 -v /var/webroot:/var/www/html 192.168.1.11:5000/myos:httpd
以上是关于Docker的主要内容,如果未能解决你的问题,请参考以下文章