容器基础使用

容器

容器原理简介

Linux内核技术支持
  • Cgroups(Control Groups) 资源管理
  • SELinux 安全
  • NameSpace 命名空间
    • Linux的NameSpace有
      • UTS
      • NETWORK
      • MOUNT
      • USER
      • PID
      • IPC
容器的优缺点
  • 优点
    • 相比于传统的虚拟化技术,容器更加简洁高效
    • 传统虚拟机需要给每个VM安装操作系统
    • 容器使用的共享公共库和程序
  • 缺点
    • 容器的隔离性没有虚拟化强
    • 共用Linux内核,安全性有先天缺陷
docker简介
  • docker是完整的一套容器管理系统
  • docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术
    • 安装条件
      • 需要64位操作系统
      • 至少RHEL6.5以上的版本(内核2.6.32-431以上 CentOS7需要内核3.1)
        • uname -r 查看内核版本 cat /etc/redhat-release 查看系统版本
      • 关闭防火墙
docker安装
  • 系统软件,位于CentOS7-1804源中
  • 扩展依赖包,位于extras源中
  • docker软件,自己下
docker镜像管理命令
镜像管理命令说明
docker images查看本机镜像
docker search 镜像名称从官方仓库查找镜像
docker pull 镜像名称:标签下载镜像
docker push 镜像名称:标签上传镜像
docker save 镜像名称:标签 -o 备份镜像名称.tar备份镜像为tar包
docker load -i 备份镜像名称导入备份的镜像文件
docker rmi 镜像名称:标签删除镜像(必须先删除该镜像启动的所有容器)
docker histroy 镜像名称:标签查看镜像的制作历史
docker inspect 镜像名称:标签查看镜像的详细信息
docker tag 镜像名称:标签 新的镜像名称:新的标签创建新的镜像名称和标签

docker容器管理命令

容器管理命令说明
docker run -it(d) 镜像名称:标签 启动命令创建启动并进入一个容器,后台容器使用参数d
docker ps查看容器 -a 所有容器 包含未启动的 -q 只显示ID
docker rm 容器ID-f 强制删除, 支持命令重入
docker start | stop | restart 容器ID启动、停止、重启容器
docker cp 本机文件路径 容器ID:容器内路径把本机文件拷贝到容器内(上传)
docker cp 容器ID:容器内路径 本机文件路径把容器内文件拷贝到本机(下载)
docker inspect 容器ID查看容器的详细信息
docker attach 容器ID进入容器的默认进程,退出后容器会关闭
docker attach 容器ID [ctrl+p, ctrl+q]进入容器以后,退出容器而不关闭容器的方法
docker exec -it 容器ID 启动命令进入容器新的进程,退出后容器不会关闭

管理镜像使用 名称:标签

管理容器使用 容器ID (–name 指定容器名字后可以使用容器名字)

云服务器使用容器

  • 机子情况

    主机名IP地址说明
    proxy192.168.1.252云服务器跳板机
    node-0001192.168.1.312CPU,2G内存
    node-0002192.168.1.322CPU,2G内存
  • 跳板机添加docker软件

cp -a docker /var/ftp/localrepo   #将docker rpm软件包复制到ftp目录下
cd  /var/ftp/localrepo  #进入目录
createrepo  --update .     #更新当前目录的自制yum源
  • 节点服务器安装docker软件
#node-0001 和 node-0002

uname -r   #确认当前云主机的内核版本
3.10.0-1160.6.1.el7.x86_64

cat  /etc/redhat-release     #查看当前云主机的系统版本
CentOS Linux release 7.5.1804 (Core)


yum makecache   #缓存

vim /etc/sysctl.conf
=========================
net.ipv4.ip_forward=1          #开启节点服务器的路由转发功能
==========================
sysctl -p

yum install -y docker-ce
systemctl enable --now docker  #启动docker服务并且开机自启

ifconfig  #查看是否有docker0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:0f:54:6f:9a  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


docker version  #查看docker 版本信息

Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:17 2019
  OS/Arch:          linux/amd64
  Experimental:     false
  • 开发FORWARD默认规则(docker1.12版本以上会设置FORWARD的默认规则为DROP)
vim /lib/systemd/system/docker.service
============================================
#ExecStart 下面添加
ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
================================================
systemctl daemon-reload #刷新服务
systemctl restart docker #重启服务
iptables -nL FORWARD      #查看  ACCEPT即可
  • docker镜像命令使用
#node-0001或node-0002  整点镜像到当前目录下
ls
nginx.tar.gz  redis.tar.gz  ubuntu.tar.gz

docker load -i nginx.tar.gz   #导入tar包镜像

docker images   #查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              82629e941a38        2 years ago         95MB
nginx               latest              42b4762643dc        2 years ago         109MB
ubuntu              latest              20bb25d32758        2 years ago         87.5MB
centos              latest              76d6bc25b8a5        2 years ago         200MB

docker search    busybox    #查找公用镜像  记得给查找的云主机配个公网IP
NAME         DESCRIPTION           STARS               OFFICIAL            AUTOMATED
busybox    Busybox base image.     2110                [OK]

docker pull   busybox   #下载镜像
docker images  #查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              491198851f0c        9 hours ago         1.23MB
redis               latest              82629e941a38        2 years ago         95MB
nginx               latest              42b4762643dc        2 years ago         109MB
ubuntu              latest              20bb25d32758        2 years ago         87.5MB
centos              latest              76d6bc25b8a5        2 years ago         200MB

docker  save busybox:latest -o busybox.tar   #备份busybox成tar包 

docker  tag ubuntu:latest    newubuntu:newtag   #给镜像添加新的名词和标签
docker	images  #查看
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
newubuntu           newtag              20bb25d32758        2 years ago         87.5MB
ubuntu              latest              20bb25d32758        2 years ago         87.5MB
#ID是一样的

docker rmi    ubuntu:latest   #删除镜像
Untagged: ubuntu:latest   #删除了

docker inspect centos:latest   #查看镜像详细信息
...........
"Env": [   #镜像环境
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 ],
"Cmd": [   #镜像默认启动    docker run -it centos:latest  不加启动项时默认使用
      "/bin/sh",
      "-c",
      "#(nop) ",
       "CMD [\"/bin/bash\"]"
 ],

...........

docker history  nginx:latest   #查看镜像的历史信息
  • docker容器管理命令
docker run -itd nginx:latest   #后台启动容器
5101e4fa279ce6817251eca11167bc6872b8ee553259f9a8b7d31407c16d5a7b

pgrep    nginx  #查看进程
4859
4891
#有了

docker ps    #查看启动的容器   -a   显示所有容器 包括为启动的   -q  只显示容器ID
#容器ID          镜像           命令         创建时间         状态           端口       名字
CONTAINER ID    IMAGE           COMMAND     CREATED         STATUS         PORTS      NAMES
5101e4fa279c   nginx:latest    "nginx..."   3 minutes ago   Up 3 minutes   80/tcp     keen_jang

docker stop 5101e4fa279c  #关闭容器
5101e4fa279c  #关闭了

docker run -it --name myos centos:latest /bin/bash     #前台创建启动进入centos:latest镜像 指定名字为myos
[ctrl+p, ctrl+q]   #组合键 退出容器但是不关闭容器
docker ps   #查看下
CONTAINER ID   IMAGE          COMMAND       CREATED        STATUS         PORTS    NAMES
ecd81bc15735  centos:latest   "/bin/bash"   22 seconds ago  Up 21 seconds          myos


docker attach  ecd81bc15735   #进入容器 容器需要启动的 且必须是交互式的容器(前台)
exit   #推出并且关闭容器

docker ps -aq   #查看所有容器ID
ecd81bc15735
5101e4fa279c
fe4dcdc4fea1            #有三个容器关闭着

docker start 容器ID
docker stop  容器ID
docker restart 容器ID

docker start ecd841bc15735   #启动
docker inspect   ecd841bc15735  | grep IPAddress #查看容器信息过滤下
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",    #有IP地址     
                    "IPAddress": "172.17.0.2",

#docker0的地址为172.17.0.1 网关     每启动一个容器   每个容器的IP都是172.17.0.x 逐渐加1
#因为是nginx容器服务  所以可以访问测试下
curl http://172.17.0.2   #访问 容器80端口

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#成功收到nginx的欢迎页面

#删除所有容器
docker rm -f $(docker ps -aq)
ecd81bc15735
5101e4fa279c
fe4dcdc4fea1
  • 修改nginx容器内容
#启动nginx容器
docker  run --name nginx -itd nginx:latest 
3c97df1b59e1
#curl 172.17.0.2能够收到欢迎界面   现在修改网页内容

docker exec -it 3c97df1b59e1 /bin/bash   #exec进入容器退出不关闭容器 但是需要添加启动命令

cat /etc/nginx/conf.d/default.conf  #查看网页文件位置

echo "hello docker_nginx!" > /usr/share/nginx/html/index.html  #直接修改

exit  #退出容器

curl http://172.17.0.2 #访问修改的内容
hello docker_nginx!      #成功访问到了内容


#因为容器内没有编辑器命令  所以复杂的修改需要将容器里面的文件拷贝出来修改在拷贝回去
#将容器内的网页文件拷贝出来
docker cp 3c97df1b59e1:/usr/share/nginx/html/index.html ./index.html
vim ./index.html
========================
hello docker cp nginx!   #修改
=============================
#再传回去
docker cp ./index.html 3c97df1b59e1:/usr/share/nginx/html/index.html

#再次访问看看
curl http://172.17.0.2
hello docker cp nginx!  #成功了
  • 容器内服务安装
docker rm -f $(docker ps -aq)  #清下环境
docker run -it --name myphp centos:latest
796adf954110

#在容器内
rm -f /etc/yum.repos.d/*.repo
[ctrl+p, ctrl+q] #  不关闭容器退出
docker cp /etc/yum.repos.d/CentOS-Base.repo 796adf:/etc/yum.repos.d/  #复制repo进去

docker exec -it 796ad /bin/bash #进入容器
yum install -y net-tools httpd #安装  因为可以和真机同样使用云yum源
echo hello world! > /var/www/html/index.html  #写入

#因为容器没有systemd上帝进程 所以没法systemctl 启动服务  只能手动了
#查看/usr/lib/systemd/system/httpd.service
#EnvironmentFile=/etc/sysconfig/httpd  #配置文件
#配置文件里面就是LANG=C
#ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND   启动命令

#手动启动服务
export LANG=C  #设置为环境变量  编码环境  测试不写好像当前环境没影响
/usr/sbin/httpd -DFOREGROUND
[ctrl+p, ctrl+q]  #不关闭退出   

curl http://172.17.0.2/
hello world!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值