docker

docker

容器技术的核心有以下几个内核技术组成:
CGroups(Control Groups)-资源管理NameSpace-进程隔离
SELinux安全

优势
传统虚拟机需要给每个VM安装操作系统容器使用的共享公共库和程序
启动非常快速
劣势
容器的隔离性没有虚拟化强
共用Linux内核,安全性有先天缺陷SELinux难以驾驭
监控容器和容器排错是挑战
docker 安装
把软件 docker-engine docker-engine-selinux 拷贝到私有yum仓库,运行 createrepo .

安装 docker
yum clean all
yum install -y docker-engine docker-engine-selinux

设置开机启动,启动 docker 服务
systemctl enable docker
systemctl start docker

系统刚刚配置完是没有镜像的
查看系统镜像
docker images

从官方源搜索镜像
docker search busybox

下载镜像
docker pull busybox

上传镜像
docker push busybox

把本机镜像备份为 tar 包
docker save busybox >busybox.tar

把备份的tar包导入到本机镜像
docker load <busybox.tar

练习导入镜像

1、查看容器
docker ps

2、创建一个 bash 交互的容器
docker run -it centos /bin/bash

3、创建一个非交互的容器
docker run nginx
docker run -itd centos /bin/bash

查看镜像列表
docker images

查看镜像制作历史docker history busybox

查看镜像底层信息
docker inspect busybox

下载镜像docker pull busybox

上传镜像docker push

删除本地镜像docker rmi busybox

镜像另存为tar包docker save busybox >busybox.tar
使用tar包导入镜像
docker load <busybox.tar

搜索镜像
docker search busybox

修改镜像名称和标签
docker tag busybox:latest busybox:v1

容器相关命令

以交互模式启动一个容器
docker run -it centos bash

启动的容器放在后台
docker run -itd centos bash

显示正在运行的容器
docker ps

显示所有容器
docker ps -a

显示所有容器,单只显示 id
docker ps -aq

启动,停止,重启容器
docker start|stop|restart 容器id

进入容器
docker exec -it 容器id /bin/bash

连接容器 console,exit 退出会导致容器关闭,可以使用 CTRL +(p,q) 退出
docker attach 容器id

显示容器详细信息
docker inspect 容器id

查看容器内运行的进程
docker top 容器id

删除容器
docker rm 容器id

关闭所有容器
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

 

增删改数据、安装软件、修改配置文件后,容器另存为镜像
docker run -it centos
修改容器配置环境
配置 yum 源
[rhel7]
name=rhel
baseurl=ftp://192.168.4.254/rhel7
enabled=1
gpgcheck=0

清理缓存
yum clean all
安装软件
yum install -y net-tools
yum install -y psmisc
yum install -y iproute
yum install -y vim-enhanced
yum install -y openssh-clients

安装完成以后,切换到宿主机
对已经修改过的 docker 做镜像
查看修改过的容器的 id
docker ps

把容器做成镜像
docker commit 容器id 新镜像的名称:tag
docker commit dd61895d9f88 mycentos:latest

查看新的镜像
docker images

用新的镜像生成容器
docker run -it mycentos /bin/bash

进入容器检查,刚刚的配置

利用 Dockerfile 编排镜像
关键字
FROM:基础镜像
MAINTAINER:镜像创建者信息
EXPOSE:开放的端口
ENV:设置变量
ADD:复制文件到镜像
RUN:制作镜像时执行的命令,可以有多个
WORKDIR:定义容器默认工作目录
CMD:容器启动时执行的命令,仅可以有一条CMD

综合 Dockerfile 实验
1、自动配置 yum 的源
2、安装 net-tools psmisc httpd sshd
3、设置容器启动,自动运行 [sshd,httpd]
4、设置默认主页为 Hello World
5、添加用户 user01,并设置默认密码为 123456
6、在宿主机添加映射,把 22,80 映射出去

yum 源配置文件
local.repo
[rhel7]
name=rhel
baseurl=ftp://192.168.4.254/rhel7
enabled=1
gpgcheck=0

Dockerfile 文件配置
FROM centos
MAINTAINER lix lix@tedu.cn
ENV HOSTNAME=web
RUN rm -f /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum clean all
RUN yum install -y net-tools psmisc vim-enhanced openssh-clients
RUN yum install -y openssh-server httpd
WORKDIR /var/www/html
RUN echo "Hello World" >index.html
RUN useradd user01
RUN echo 123456 |passwd --stdin user01
RUN chage -d 0 user01
EXPOSE 22
EXPOSE 80
ADD run.sh /etc/init.d/run.sh
CMD ["/etc/init.d/run.sh"]

因为每个 images 只能有一个 CMD,我们需要启动两个服务
这里使用一个脚本解决这个问题
run.sh 脚本
#!/bin/bash
/usr/sbin/sshd-keygen >/dev/null 2<&1
/usr/sbin/sshd
/usr/sbin/httpd -DFOREGROUND

配置完以后,build 自定义镜像
docker build -t myimg .

编译成功以后,我们启动容器,这里使用参数 -p 映射端口
[ -p ] 宿主机端口:容器端口
docker run -d -p 80:80 -p 222:22 myimg

容器启动以后:
可以使用 curl http://宿主机ip/ 访问容器
可以使用 ssh -l user01 -p 222 宿主机 ip 连接

创建私有仓库
1、docker 的启动文件,添加参数
--insecure-registry=192.168.4.20:5000

systemctl daemon-reload
systemctl restart docker

2、启动私有仓库
docker run -d -p 5000:5000 registry

验证
curl http://192.168.4.20:5000/v2/

3、给镜像打标签
docker tag busybox:latest 192.168.4.20:5000/busybox:latest

4、上传
docker push 192.168.4.20:5000/busybox:latest

验证:
删除本地镜像
docker rmi 192.168.4.20:5000/busybox:latest busybox:latest

使用远程镜像启动容器
docker run -it 192.168.4.20:5000/busybox

查看远程仓库上有什么镜像
http://192.168.4.20:5000/v2/_catalog

查看远程镜像的tag
http://192.168.4.20:5000/v2/<name>/tags/list

查看容器的ip
docker inspect -f {{.NetworkSettings.IPAddress}} 容器id

使用容器挂载共享目录
-d 宿主机源目录:容器内目录
docker run -d -v /var/webroot:/var/www/html myimg

NFS 共享目录
在 docker 的宿主机挂载 NFS 共享目录
在启动容器的时候,使用 -v 参数把 NFS 共享目录挂接进容器

docker 网络管理
查看 docker 网络结构
docker network ls

创建一个网桥
docker network create --driver bridge --subnet=192.168.1.0/24 br1

查看某一个桥的详细信息
docker network inspect 网桥id

创建一个容器,使用新建的网桥
docker run -it --network=br1 myimg /bin/bash


给容器添加网卡
nspid=$(docker inspect -f '{{.State.Pid}}' conid)

ip link add lnet0 type veth peer name rnet0

ip link set dev lnet0 master br0

ip link set dev lnet0 up

ip link set dev rnet0 name eth1 netns ${nspid}

ln -s /proc/${nspid}/ns/net /var/run/netns/${nspid}

ip netns exec ${nspid} ip link set dev eth1 up

ip netns exec ${nspid} ip addr add 192.168.1.100/24 brd 192.168.1.255 dev eth1

转载于:https://www.cnblogs.com/fuzhongfaya/p/8953302.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值