docker的搭建及使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker的搭建及使用相关的知识,希望对你有一定的参考价值。
yum search 包名 查找软件包
yum list |grep -i "vim" 查找软件包名
yum provides *vim 查找软件包名
which httpd (查看路径)
rpm -qf /usr/bin/httpd(查看包名)
rpm -qc httpd(查看配置文件)
sysctl -w net.ipv4.ip_forward=1 打开路由
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o p8p1 -j MASQUERADE 实现虚拟机上网
cat 编辑器
cat 0< a.txt = cat <0& (标准输出)
cat >ji.repo <<abc 将键盘输出,出入到ji.repo文件里,并以abc结尾。
>lsdfsdlf
>flsdfdf
>abc
容器
容器技术的核心有以下几个内核技术组成:
CGroups(Control Groups)资源管理
NameSpace-进程隔离
SELinux安全
由于是物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速
Docker
Docker是完整的一套容器管理系统
Docker提供了一组命令,让用户更加直接方便地使用容器技术,而不需要过多关心底层内核技术
优点:
相比于传统的虚拟化技术,容器更加简介高效。
传统虚拟机需要给每个VM安装操作系统。
容器使用的公共库和程序。
缺点:
容器的隔离性没有虚拟化强。
共用Linux内核,安全性有先天缺点。
SELinux难以驾驶。
监控容器和容器排错是很棘手的。
镜像
在Docker中容器是基于镜像启动的。
镜像是启动容器的核心。
镜像采用分层设计。
使用快照的cow技术,确保底层数据不丢失。
清除防火墙记录:
iptables -t nat -F (清除所有记录)
iptables -t nat -X (清除自定义记录)
iptables-save
一 安装包docker-engine
yum -y install docker-engine
二 启动服务
systemctl start docker
systemclt enable docker
docker 选项
-version 查看版本
-search 搜索镜像
-images 查看镜像列拜
-pull 下载镜像
-push 上传镜像
-save 镜像另存为tar包
-load 使用tar包导入镜像
-rmi 删除本地镜像
-history 查看镜像制作历史
-inspect 查看镜像底层信息
-tag 修改镜像名和标签(创建软连接)
docker images
docker help pull 帮助
格式:docker pull [OPTIONS] NAME:[:TAG|@DIGEST]
docker pull rhe17 下载镜像
docker load < xx.tar 导入镜像
docker save rhe17 > xx.tar 导出镜像
docker history centos
docker tag rhe17:latest wode:biaoqian 创建软连接
docker inspect rhe17
docker images 查看镜像列表
镜像仓库名 镜像标签 镜像ID 创建时间 大小
REPOSITORY TAG IMAGE ID CREATED SIZE
php latest 988e578c487e 15 months ago 33.18 MB
命令列表:
docker run 运行容器
docker ps 查看容器列表
docker stop 关闭容器
docker start 启动容器
docker restart 重起容器
docker attache|exec 进入容器
docker inspect 查看容器底层信息
docker top 查看容器进程列表
docker rm 删除容器
例:
docker run --name 自定义容器名
docker run -v 挂载
docker run -link 2台连接起来
docker run -i交互
docker run -t终端
docker run -d后台
docker run -d -p(端口映射)
docker run -d -p 80(物理机端口):80(容器nginx端口) nginx
docker run -it centos /bin/sh(在容器里要执行的命令) exit直接退出便会杀死上帝进程,导致容器关闭
docker run -itd centos /bin/sh(在容器里要执行的命令) 放入后台,可以用docker ps 查看到
docker ps -a 查看所有容器列表
docker ps -aq 仅显示容器id号
docker stop/start/restart 9a5c63e34644 (容器id号)
docker attach -it 9a5c63e34644 /bin/bash(在容器里要执行的命令) 进入上帝进程,exit直接退出便会杀死上帝进程,导致容器关闭
docker exec -it 9a5c63e34644 /bin/bash (在容器里要执行的命令) 在上帝进程下创建一个子进程进入子进程,exit退出也不会关闭容器
docker inspect 9a5c63e34644 查看容器底层信息
docker top 9a5c63e34644 查看容器进程列表
docker rm 9a5c63e34644 删除容器
docker rm `docker ps -aq` 删除所有容器
mysql的指定user启动:
mysqld --initialize --user=mysql
自定义镜像
docker commit
使用镜像启动容器,在该容器基础上修改,另存为另一个镜像。
docker images
docker commit d3d188ad882cc myos:laters 创建名为myos的镜像
Dockerfile
自己编写镜像的内容
Dockerfile语法格式
FROM 基础镜像
MAINTAINER 镜像创建者信息
EXPOSE 开放的端口
ENV 设置变量
ADD 复制文件到镜像
RUN 制作镜像时执行的命令,可以有多个
WORKDIR 定义容器默认工作目录
CMD 容器启动时执行的命令,仅可以有一条CMD
Dockerfile 工作流程
构建一个有基本命令的镜像
mkdir /root/build
cd /root/build
cp /etc/yum.repos.d/xixi.repo /root/build/
vim Dockerfile
FROM centos (基础镜像)
RUN rm -rf /etc/yum.repos.d/*.repo
ADD local.repo /etc/yum.repos.d/xixi.repo 前面本地路径 后面为镜像路径
RUN yum -y install net-tools psmisc vim-enhanced iproute
CMD ["/bin/bash","-DFOREGROUND"]
docker build -t imagedname(镜像名) Dockerfile (当前目录名)
docker build -t http:laters /root/build/
构建一个有http和ssh服务的镜像
mkdir /root/build
cd /root/build
mkdir /root/build/dockerfile
cp /etc/yum.repos.d/xixi.repo /root/build/
vim oo.sh
#!/bin/bash
EnvironmentFile=/etc/sysconfig/sshd
/usr/sbin/sshd -D &
EnvironmentFile=/etc/sysconfig/httpd
/usr/sbin/httpd -DFOREGROUND &
wait
chmod 755 oo.sh
vim Dockerfile
FROM centos
MAINTAINER luozixu
RUN rm -rf /etc/yum.repos.d/*.repo
ADD local.repo /etc/yum.repos.d/xix.repo
RUN yum -y install net-tools psmisc vim-enhanced iproute httpd openssh-server
ENV EnvironmentFile=/etc/sysconfig/sshd
RUN /usr/sbin/sshd-keygen &>/dev/null
RUN echo "123456" |passwd --stdin root
ADD oo.sh /etc/init.d/oo.sh
EXPOSE 22 80
CMD ["/etc/init.d/oo.sh"]
docker build -t abc:latest /root/build/dockerfile/
docker run -itd -p 222:22 -p 80:80 abc:latest
docker run -itd -p 222:22 --name /my-mysql quan /bin/bash
我们在使用Docker的时候,经常可能需要连接到其他的容器,比如:web服务需要连接数据库。按照往常的做法,需要先启动数据库的容器,映射出端口来,然后配置好客户端的容器,再去访问。其实针对这种场景,Docker提供了--link 参数来满足。
docker run --name mysql -e MYSQL_ROOT_PASSWORD=server -d mysql
docker run --name nginx --link mysql:aliasmysql -d nginx
docker run -d -v /usr/docker_file/NginxDemo.war:/usr/local/tomcat/webapps/NginxDemo.war -p 8080:8080 docker.io/tomcat
自定义镜像仓库
流程:
docker pull registry
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=ip:5000
systemctl daemon-reload
systemctl restart docker
docker run -id -p 5000:5000 registry
docher tag 镜像 ip地址:5000/镜像:latest
docker push ip地址:5000/镜像:latest
进入registry容器查看/etc/docker/registry/config.yml
例:
docker images
docker run -id -p 5000:5000 registry
docker tag ubuntu:latest 192.168.4.6:5000/ubuntu
vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.4.6:5000"]
}
docker push 192.168.4.20:5000/ubuntu
firefox http://192.168.4.20:5000/v2/_catalog
firefox http://192.168.4.20:5000/v2/<name>/tags/list
docker rmi ubuntu:latest (删除ubuntu镜像)
docker run -itd 192.168.4.20:5000/ngins:latest(网络源镜像)
存储卷
卷的概念
docker容器不保持任何数据
重要数据请使用外部卷存储(数据持久化)
容器可以挂载真实机目录或共享存储为卷
主机卷的映射
将真实机目录挂载到容器中提供持久化存储
touch /root/a.txt
docker run -v /root/a.txt -it nginx:laest /bin/bash (-v:同步/root/a.txt文件)
共享存储
一台共享存储服务器可以提供给所有Docker主机使用
共享存储服务器(NAS、SAN、DAS等)
如:
– 使用NFS创建共享存储服务器
– 客户端挂载NFS共享,并最终映射到容器中
Docker主机
– mount挂载共享
– 运行容器时,使用-v选项映射磁盘到容器中
Linux网桥
创建虚拟网卡
真实网卡配置文件
– cat /etc/sysconfig/network-scripts/ifcfg-eth0
虚拟网卡配置文件
– cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15
创建虚拟网桥
# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
... ...
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.4.15
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0
DEVICE=eth0
BRIDGE=br0
ONBOOT=yes
IPADDR=192.168.4.15
[[email protected] ~]# ~]# brctl show
Docker网络拓扑
查看默认Docker创建的网络模型
# docker network list
# ip a s docker0
# brctl show docker0 //启动容器会绑定该网桥
新建Docker网络模型
# docker network create --driver bridge test01
# docker network list
# ip a s
# docker network inspect test01
查看默认Docker创建的网络模型
– 自定义网段
# docker network create --subnet=172.30.0.0/16 test01
启动容器,使用刚刚创建的自定义网桥
# docker run --network=bridge|host|none ... ...
# docker run --network=test01 -id nginx
客户端访问容器内的资源
默认容器通过SNAT可以访问外网
但外部网络的主机不可以访问容器内的资源
端口映射
– 使用端口映射可以实现外部网络访问容器内的资源
# docker run -p 8080 80 -id nginx
//如:真实机IP为192.168.4.5,
使用-p映射真实机的8080端口到容器中的80端口
# firefox http://192.168.4.5
添加网桥
brctl --help
brctl addbr br0
brctl delbr br0 删除br0
ip link set br0 up 激活网桥
brctl show 查看
添加网卡
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
.......
/etc/init.d/network reload
brctl addif br0 eth1 把网卡eth1加入到br0里
nmcli con 查看
分屏 :
yum -y install screen
screen
ctrl+a shift+s
ctrl+a shift+|
ctrl+a tab
ctrl+a ctrl+c
以上是关于docker的搭建及使用的主要内容,如果未能解决你的问题,请参考以下文章