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
- [root@jacob ~]# ~]# 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
来源: http://www.bubuko.com/infodetail-2731052.html