当前位置 博文首页 > Docker 实战

    Docker 实战

    作者:陈彦斌 时间:2021-01-12 21:08

    Docker入门

    概述

      Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

      容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

      Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

    注意事项

    • Linux内核版本必须大于:3.8.+
    • 查看内核版本:uname -r

    Docker下载及安装

    1、关闭防火墙
    systemctl stop firewalld.service
    
    
    2、修改为SELINUX=disabled
    vim /etc/selinux/config
    SELINUX=disabled
    
    
    3、安装wget
     yum -y install wget
    
    
    
    4、查看docker版本
    yum list|grep docker
    
    5、安装docker
    yum install -y docker.x86_64
    
    
    6、安装docker ce社区版
    cd /etc/yum.repos.d/
    wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    
    7、下载社区版本
    yum -y install docker-ce-cli.x86_64
    
    8、设置开机启动
    systemctl enable docker
    
    9、更新xfsprogs
    yum update xfsprogs

    10、启动docker服务
    systemctl start docker

    11、查看docker版本
    docker version

    12、查看docker详细信息
    docker info

     

     

    Docker镜像的搜索及查看删除

    查看本地镜像

    docker images

    搜索镜像

    docker search centos
    
    docker search 名字

    搜索镜像并过滤是官方的

    docker search --filter "is-official=true" centos

    搜索镜像并过滤大于多少颗星星的

    docker search --filter stars=10 centos

    下载Centos7镜像

    docker pull centos:7
    
    docker pull 项目:版本号

    修改本地镜像名字(小写)

    docker tag centos:7 mycentos:1

    本地镜像的删除

    方式一
    docker rmi centos:7
    
    
    方式二
    docker rmi IMAGE ID

    配置阿里云镜像加速

    Docker基本操作

    构建容器

    • -i:表示以交互模式运行容器(让容器的标准输入保持打开)
    • -d:表示后台运行容器,并返回容器id
    • -t:为容器重新分配一个伪输入终端
    • --name:为容器指定名称

    docker run -itd --name=mycontos centos:7

    查看本地所有的容器

    docker ps -a

    查看本地正在运行的容器

    docker ps

    停止容器

    方式一
    docker stop NAMES
    
    方式二
    docker stop CONTAINER ID

    一次性停止所有容器

    docker stop $(docker ps -a -q)

    一次性全部启动

    docker ps -a -q
    docker start $(docker ps -a -q)

    启动容器

    docker start CONTAINER_ID / CONTAINER_NAME

    重启容器

    docker restart CONTAINER_ID / CONTAINER_NAME

    删除容器

    docker rm CONTAINER_ID / CONTAINER_NAME

    必须先停止,才能删除

    强制删除镜像

    docker rm -f CONTAINER_ID / CONTAINER_NAME

    查看容器详细信息

    docker inspect CONTAINER_ID / CONTAINER_NAME

    进入容器

    docker exec -it 0ad5d7b2c3a4 /bin/bash

    退出容器

    exit

    容器的文件复制于挂载

    从宿主机复制到容器

    docker cp 宿主机本地路径 容器名称:容器路径

    从容器复制到宿主机

    docker cp 容器名称:容器路径 宿主机本地路径

      这个就不演示了,操作跟上面??那个相反。

    宿主机文件挂载到容器里(重要)

    docker run -itd -v --name=mycentos77 /root/cyb/:/home centos:7

      可以将mysql存储文件路径,挂载到容器里

    Docker自定义镜像

    制作镜像方式

    • 基于Docker Commit制作镜像
    • 基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式

    Commit构建自定义镜像

    方式一
    docker commit 9bdb420d8ea0  mycentos:v1
    
    语法:docker commit CONTAINER ID PEPOSITORY:TAG
    
    
    方式二
    docker commit -a "chenyanbin" -m "mkdir /home/chenyanbin" 9bdb420d8ea0  mycentos:v2
    
        -a:标注作者
        -m:说明解释
    
    查看详细信息
    docker inspect CONTAINER ID
    
    查看本地镜像
    docker images

     

    dockerfile构建自定义镜像 

    vi dockerfile
    
    
    FROM centos:7 
    MAINTAINER ybchen 543210188@qq.com 
    RUN echo "正在构建镜像!!!" 
    WORKDIR /home/chenyanbin 
    COPY 123.txt /home/chenyanbin 
    RUN yum install -y net-tools
    
    
    构建:docker build -t mycentos:v1 .
    
    查看:docker images
    
    启动:docker run -itd mycentos:v1
    
    进入镜像:docker exec -it mycentos:v1 /bin/bash

    FROM

      基于那个镜像

    MAINTAINER

      注明作者

    COPY

      复制文件进行镜像(只能用作相对路径,不能用绝对路径)

    ADD

      复制文件进入镜像(如果是.tar.gz文件会解压)

    WORKDIR

      指定工作目录,假如路径不存在会创建路径

    ENV

      设置环境变量

    EXPOSE

      暴露容器端口

    RUN

      在构件镜像的时候执行,作用于镜像层面

    ENTRYPOINT

      在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条

    CMD

      在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条

      容器启动后执行默认的命令或参数,允许被修改

    命令格式

      sheel命令格式:RUN yum install -y net-tools

      exec命令格式:RUN ["yum","install","-y","net-tools"]

    Dockerfile实战

    构建jdk8

    在宿主机中执行如下命令

    1、解压
    tar -xf jdk-8u261-linux-x64.tar.gz
    
    2、移动
    mv jdk1.8.0_261 /usr/local/jdk
    
    3、打开:/etc/profile
    vi /etc/profile
    
    4、在最下面追加如下命令
    export JAVA_HOME=/usr/local/jdk
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    5、让配置文件生效
    source /etc/profile

    编辑dockerfile

    1、jdk包必须放到/root的文件夹下
    
    2、编辑dockerfile
    vi dockerfile
    
    FROM centos:7
    ADD jdk-8u261-linux-x64.tar.gz /usr/local
    RUN mv /usr/local/jdk1.8.0_261 /usr/local/jdk
    ENV JAVA_HOME=/usr/local/jdk
    ENV JRE_HOME=$JAVA_HOME/jre
    ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    3、构建dockerfile
    docker build -t mycentos:jdk .
    
    4、启动
    docker run -itd mycentos:jdk
    
    5、进入容器
    docker exec -it xxx /bin/bash

    FROM centos:7
    ADD jdk-8u211-linux-x64.tar.gz /usr/local
    RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk 
    ENV JAVA_HOME=/usr/local/jdk
    ENV JRE_HOME=$JAVA_HOME/jre
    ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    ADD apache-tomcat-8.5.35.tar.gz /usr/local
    RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
    EXPOSE 8080
    ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
    
    启动容器
    docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT mycentos:jdk /bin/bash
    View Code

    构建nginx

    1、dockerfile
    FROM centos:7
    ADD nginx-1.18.0.tar.gz /usr/local
    COPY nginx_install.sh /usr/local
    RUN sh /usr/local/nginx_install.sh
    EXPOSE 80
    
    
    2、sheel脚本,vi nginx_install.sh
    #!/bin/bash 
    yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel 
    cd /usr/local/nginx-1.18.0 
    ./configure --prefix=/usr/local/nginx && make && make install
    
    3、构建dockerfile
    docker build -t mycentos:nginx .
    
    4、启动,-p 宿主port:容器port
    # -p 映射端口
    docker run -itd -p 80:80 mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"
    
    
    5、进入容器
    docker exec -it xxx /bin/bash
    
    6、查看防火墙
    firewall-cmd --state
    
    7、停止防火墙
    systemctl stop firewalld.service
    
    8、禁止防火墙开机启动
    systemctl disable firewalld.service 
    
    9、开启防火墙
    systemctl start firewalld.service

    注:如果访问不到,查看防火墙是否开启

    构建Redis

    1、编辑:vi redis_install.sh
    #!/bin/bash
    yum install -y gcc gcc-c++ make openssl openssl-devel
    cd /home/redis-4.0.11
    make && make PREFIX=/usr/local/redis install
    mkdir -p /usr/local/redis/conf/
    cp /home/redis-4.0.11/redis.conf /usr/local/redis/conf/
    sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
    sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf
    
    
    
    2、编写dockerfile
    FROM centos:7
    ADD redis-4.0.11.tar.gz /home
    COPY redis_install.sh /home
    RUN sh /home/redis_install.sh
    ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
    
    3、构建容器:
    docker build -t mycentos:redis .
    
    4、启动容器: #6380是宿主机端口,6379是容器的端口
    docker run -itd -p 6380:6379 mycentos:redis
    
    5、进入容器
    docker exec -it xxx /bin/bash
    
    
    6、测试redis
    /usr/local/redis/bin/redis-cli

    构建Mysql

    方式一

    1、docker 拉取mysql5.7
    docker pull mysql:5.7
    
    2、官网地址
    https://hub.docker.com/
    
    3、启动mysql
    docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
    
    4、进入容器
    docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash
    
    5、进入mysql
    mysql -uroot -proot
    
    6、创库
    create database `db_student`;
    
    7、进入库
    use db_student;
    
    8、建表
    drop table if exists `user`;
    CREATE TABLE user (
    id tinyint(5) zerofill auto_increment not null comment '学生学号',
    name varchar(20) default null comment '学生姓名',
    age tinyint default null comment '学生年龄',
    class varchar(20) default null comment '学生班级',
    sex char(5) not null comment '学生性别',
    unique key (id) ) engine=innodb charset=utf8;
    
    9、插入几条记录
    insert into user values('1','小明','15','初三','男');
    insert into user values('2','小红','13','初二','女');

    方式二

    1、编辑:init.sql
    vi init.sql
    
    create database `db_student`;
    use db_student;
    drop table if exists `user`;
    CREATE TABLE user (
    id tinyint(5) zerofill auto_increment not null comment '学生学号',
    name varchar(20) default null comment '学生姓名',
    age tinyint default null comment '学生年龄',
    class varchar(20) default null comment '学生班级',
    sex char(5) not null comment '学生性别',
    unique key (id) ) engine=innodb charset=utf8;
    insert into user values('1','小明','15','初三','男');
    
    
    2、编写dockerfile
    vi dockerfile
    
    FROM mysql:5.7
    WORKDIR /docker-entrypoint-initdb.d
    ENV LANG=C.UTF-8
    ADD init.sql .
    
    3、构建镜像
    docker build -t my-mysql:5.7 .
    
    3、启动mysql
    docker run --name some-mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d my-mysql:5.7
    
    4、进入容器
    docker exec -it some-mysql env LANG=C.UTF-8 /bin/bash
    
    5、进入mysql
    mysql -uroot -proot
    
    6、切换库
    use db_student;
    
    7、查看
    select * from user;
    下一篇:没有了