• CentOS安装docker,及其基本操作


    CentOS安装docker,及其基本操作

    一.安装docker

    Docker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上

    1.uname -an 查看当前系统版本

    2.yum -y install docker 下载安装docker

    3.service docker start  启动docker服务

    4.docker version  检查docker是否安装成功

    当看到下图的信息,就是表示本机docker已经安装成功,很简单 

    二.镜像操作

    创建容器要以镜像为基础,所以先讲下docker镜像的操作

    搜索镜像

    docker images  查看下本机的是否已经有了镜像

    目前机器里还没有镜像,去Docker Hub下载(镜像还可自定义,这里就不细说了)

    docker search java  ,还能指定具体的版本进行下载,

    例如:docker search  Ubuntu:1.2.5.4,可以进行搜docker Hub 会列出很多镜像 

    下载镜像 

    docker pull docker.io/nginx 进行下载

    下载到本地的镜像要比docker Hub上搜索出来的要大,因为下载过程中自动解压了,在查看镜像列表就有了刚才下载的镜像

    列表包含了仓库名,版本标签,镜像ID,创建时间以及所占用的空间

    删除镜像

    删除没用的镜像docker rmi镜像id

    三.镜像的创建与管理

    前边我们已经下载好了Nginx的镜像,接下来我们就创建一个只有Nginx应用的容器docker run -i -t <IMAGE_ID> /bin/bash:-i:标准输入给容器 -t:分配一个虚拟终端 /bin/bash:执行bash脚本,​​​​​​

    docker run -idt --name container_nginx -p 8080:80  docker.io/nginx

    启动一个使用镜像docker.io/nginx,名字container_nginx的容器,-p 8080:80表示将容器的80端口映射到主机的8080端口,这样我们只要访问主机的8080端口就可以访问到容器的服务了。

    注意:name前面是两个-, 端口前面有-p, docker.io/nginx是镜像名,8080是主机的端口,80是Nginx应用的端口

    主机上的一个端口只能映射一个容器端口,不可以多个容器端口对应一个主机端口(如果容器安装的centos类的系统,那么容器端口随便设定,但如果容器内只是单纯的应用,那么容器端口要是应用自身的端口)

    这样我们就创建并启动了一个容器!

    exit 退出容器

    docker ps 查看运行中的容器

    docker ps -a 查看运行中和非运行中的所有容器

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

    如果容器还未启动 执行docker start container_nginx 

    进入容器后启动Nginx

    whereis nginx 找Nginx的启动目录

    [root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginx
    container_nginx
    [root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bash
    root@84683e425116:/# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    root@84683e425116:/# /usr/sbin/nginx 

       此时在浏览器访问 http://51.110.218.9:8080/ 就可以直接访问容器内的Nginx 

    如果访问不成功,可能是主机端口的防火墙开着,执行下边的命令关闭

    / sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

    删除容器 

    容器删除之前先将容器停止 

    docker stop container_nginx 或者是容器的id

    docker rm -f container_nginx 容器删除

    docker start 与 docker run 的区别

    docker start name 启动一个已经创建的容器

    docker run 创建并启动一个容器

    docker run 命令其实是 docker create 和 docker start 的命令组合,先执行docker create 创建一个容器 再接着docker start启动

    主机和容器文件相互复制  

    从主机复制到容器 sudo docker cp host_path containerID:container_path

    从容器复制到主机 sudo docker cp containerID:container_path host_path
    请注意,以上这两个命令都是在主机中执行的,不能再容器中执行

    docker cp container_nginx:/usr/local/xin.txt  /usr/local/software/   容器向主机复制文件
    docker cp /usr/local/xinzhifu.txt  container_nginx:/usr/local/  主机向容器复制文件
     

    这样一个基础的docker容器就创建完了 。。。。。。。。。。。。

    参考资料:https://blog.csdn.net/xinzhifu1/article/details/83579256

    宿主机访问docker容器

    问题描述:初学Docker,主机Windows 10,虚拟机Cent OS7 运行了一个docker容器(Tomcat7),宿主机无法访问容器运行的服务。

      

    问题原因:宿主机无法访问docker容器ip。

    问题解决:1、虚拟机命令:ifconfig

         查看docker容器的网段、centos的IP地址:

        

        2、管理员身份打开宿主机powershell:执行命令: ROUTE -p add 172.17.0.1 mask 255.255.0.0 192.168.102.129

          Docker容器内部端口映射到外部宿主机端口。

        

        可以ping通容器ip了!

        再次在宿主机中访问:http://172.17.0.1:8080/,又见小橘猫 ~^ _ ^~

      参考资料:https://www.cnblogs.com/hongkejidan/p/10418835.html

    docker容器无法访问宿主机-No route to host

    也表现为docker间通过宿主机IP + 宿主机 端口 通信时报错: No route to host

    解决方案1 : (推荐) :

    在宿主机上将要访问的端口号添加到 public 的zone 区域:

    firewall-cmd --zone=public --add-port=2181/tcp --permanent
    firewall-cmd --reload

    解决方案2 : (不推荐) :

    直接关闭防火墙,会引起安全问题。以及docker 查新启动报 iptables no chain 之类的错误.

    systemctl stop firewalld

    注意: 问题貌似只出现在centos上,所以还是推荐ubuntu 貌似毛病少点。

    启动nginx 挂载

    docker run --name nginx -p 80:80 -d nginx

    这样就简单的把nginx启动了,但是我们想要改变配置文件nginx.conf ,进入容器,命令:

    docker exec -it nginx bash

    nginx.conf配置文件在 /etc/nginx/  下面,但是你使用vim nginx.conf 或者vi nginx.conf

    会发现vi或者vim命令没有用,解决办法:apt-get  update  完成之后 apt-get install vim

    此时你就可以自己定制nginx.con文件了,改好配置文件之后重启容器,步骤,先把容器停了

    docker stop nginx  然后重启 docker start nginx

    这样不是很方便,还有第二种方式,挂载配置文件,就是把装有docker宿主机上面的nginx.conf配置文件映射到启动的nginx容器里面,这需要你首先准备好nginx.con配置文件,如果你应经准备好了,下一步是启动nginx

    命令:docker run --name nginx -p 80:80 -v /home/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/docker-nginx/log:/var/log/nginx -v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

    解释下上面的命令:

    --name  给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器

    -p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定

    -v 挂载文件用的,第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,第二个表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面

    第三个-v 表示的和第一个-v意思一样的。

    -d 表示启动的是哪个镜像

    我个人更喜欢第二种映射的方式,麻烦的是需要自己准备好nginx.conf 和default.conf文件,我是直接从容器里面复制的,然后根据自己的需要改的

  • 相关阅读:
    day21继承
    day22
    面向对象
    常用模块
    模块
    迭代器
    【游记】2020-CSP
    【初赛解析】2021CSP-S初赛解析(不完全)
    【题解】AcWing 1390.通电围栏
    【题解】AcWing 1387.家的范围
  • 原文地址:https://www.cnblogs.com/wjw1014/p/11936905.html
Copyright © 2020-2023  润新知