Centos的docker的使用(希望大家看完,都是很用心写的笔记感谢大家)

Centos的docker的使用

大家好,这是本人学习Centos下docker的从零开始的笔记(后期可会制作关于win系统的,大家可以先大致了解下,在虚拟机中大致了解docker的使用,对docker有个大致的了解),在这里分享给大家,喜欢的朋友们可以点点关注,或者留言告诉我哪些地方可以改进现在我们开始一起学习吧!

认识Docker

概念

  • Docker可以让开发者打包他们的应用以及依赖到一个轻量,可以移植的容器中,然后发布到任何流行的Linux机器上
  • 容器是完全使用沙箱机制,相互隔离
  • 开销极低
  • 总的来说,Docker是解决软件跨环境运行的问题

安装Docker

  • 1、yum 包更新到最新
  • yum update
  • 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖
  • yum install -y yum-utils device-mapper-persistent-data lvm2
  • 3、 设置yum源
  • yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 4、 安装docker,出现输入的界面都按 y
  • yum install -y docker-ce
  • 5、 查看docker版本,验证是否验证成功
  • docker -v

配置Docker的镜像加速器(这里我们选择阿里云的)
容器镜像服务
我们在阿里搜索容器镜像服务。这里就不打码了,每个人都有一个自己的,只要注册一个阿里账号就好了
这里就不打码了,每个人只要有阿里账号就有一个自己的加速地址,请大家用自己的地址哦。
然后直接在centos把图片下面的命令复制过去就可以了
阿里云的命令
之后再打一条指令

cat /etc/docker/daemon.json

看有没有内容,内容一般就是你的加速地址,以后你如果想改地址,直接在这个文件中改自己的地址就好了。

Docker命令

  • Docker服务相关的命令

  • 启动Docker服务

systemctl start docker

  • 停止Docker服务

systemctl stop docker

  • 重启Docker服务

systemctl restart docker

  • 查看Docker服务

systemctl status docker

  • 开机启动Docker服务

systemctl enable docker

  • Docker镜像相关命令

  • 查看镜像

docker images

  • 搜索镜像

docker search redis(这是一个软件名)

  • 拉取镜像

docker pull redis (不写版本号就是最新的版本号)
docker pull redis:5.0 (选择版本号注意这个冒号)

  • 删除镜像

docker rmi (填写image ID)
docker rmi redis:latest (或者根据软件和版本号)

这里rm删除的意思, i是image镜像, 本人写容器下了一个centos:7

docker pull centos:7

Docker容器相关命令

  • 查看容器

docker ps 查看当前运行的容器
docker ps -a 查看历史全部容器

  • 创建容器(注意注意实际项目开发需要用到数据卷!!!具体看下一段哦)

docker run -it --name=centos centos:7 /bin/bash
docker run -id --name=centos centos:7 /bin/bash
可以看到 [root@e48c3bef171c /]原来是[root@localhost /]

-i 是持续运行的意思,否则只有客户端连接才开启, -t 是在终端启动,使用命令行,命名随意,加上docker容器运行的环境centos:7, 后面是一个bin文件后的脚本 -d是守护进程的意思,输入exit后再查看容器,发现容器依旧在运行
总的来说 -it交互式容器,-id守护式容器
退出容器
退出当前容器, 输入exit,这里为什么没显示localhost,因为我使用了putty连接不是在虚拟机本机中连接的。

  • 进入容器

docker exec -it centos /bin/bash

  • 启动容器

docker start centos(容器的名称)

  • 停止容器

docket stop centos(容器的名称)

  • 删除容器

docker rm centos(容器的名称或者容器的id)
docker rm ‘docker ps -aq’ 删除所有
注意注意,要在容器停止的时候删除哦

  • 查看容器信息

docker inspect centos

运行centos时一般会报错,这里顺便把这个问题也解决下

WARNING: IPv4 forwarding is disabled. Networking will not work

大家可以先访问这个链接查看,本人靠该方法解决
解决docker网络问题

注意注意,要先按下i,键盘上的i这是插入的意思,然后再输入
保存先按下esc,键盘上的esc,在输入:wq保存,注意这个:冒号

Docker容器的数据卷

  • 思考docker容器删除后, 在容器中产生的数据还在吗? 答案:当前不在喽,删都删了留着干嘛,和微信一样,你微信app卸载,历史记录那些都删了
  • 思考docker容器和外部机械可以直接交换文件吗?相当于我主机是外部机器, 宿主机是虚拟机,容器是docker?答案:不行,你的主机,外部机械,不能直接和容器进行交互,但是,外部机器和宿主机之间肯定可以通讯
  • 容器之间想要进行数据交互

数据卷概念

  • 数据卷是宿主机中的一个文件或目录(在虚拟机中),要联系起来必须容器也绑定一个目录,当前名称可以不一样。然后把宿主机的目录和容器的目录挂载起来,这个时候宿主机的目录就被成为数据卷(主机与虚拟机的共享文件)
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

数据卷作用

  • 容器数据持久化
  • 外部机器和容器间接通讯
  • 容器之间数据交换

配置数据卷

  • 创建启动容器时, 使用-v参数设置数据卷
  • docker run … -v 宿主机目录(文件): 容器内目录(文件)…
    注意:
    1.目录必须是绝对路径
    2.如果目录不存在,会自动创建
    3.可以挂载多个数据卷

docker run -it --name=centos-it -v /root/data/centos-it:/root/data/centos-it_container centos:7 /bin/bash

cd ~
ls

可以看到目录下有data文件

现在,继续用putty,连接我们的虚拟机, 操作数据卷

现在我们进宿主机的/root/data/centos-it目录下创建文件touch Dioecare.txt, 再进入容器的目录下查看,发现也多了一个文件

读者可以尝试将该容器删除,然后重新输入创建命令,发现容器内部文件依旧复原。
若要挂在多个目录

docker run -it --name=centos-it -v /root/data/centos-it:/root/data/centos-it_container -v /root/data1/centos-it:/root/data1/centos-it_container centos:7 /bin/bash

数据卷容器

  • 多容器数据交换
    1.多个容器挂载同一个数据卷
    2.数据卷容器

  • 配置数据卷容器

  • 创建启动c3数据卷容器,使用-v参数, 设置数据卷

docker run -it --name -v /volume centos:7 /bin/bash

  • 创建启动c1 , c2容器 使用 --volumes-from 参数 设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

Docker应用部署

Mysql部署
案例:需求
在Docker容器中部署mysql,并通过外部mysq客户端操作mysql server
实现步骤:
1. 搜索mysql镜像
2. 拉取mysq镜像
3. 创建容器
4. 操作容器中的mysql
5. 测试访问

容器内的网络服务和外部机器不能直接通信
外部机器和宿主机可以直接通讯
宿主机和容器可以通讯
结论:
可以让宿主机的3307端口和容器的3306端口映射,外部机器访问宿主机的3307端口

搜索镜像
docker search mysql
拉取mysql镜像
docker pull mysql:5.7
创建目录(你现在应该在/root目录下)
mkdir mysql
cd mysql
执行
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=ct980218 \
mysql:5.7
若出现网络警告,查看上一步骤,有说明
docker exec -it c_mysql /bin/bash
mysql -u root -p
ct980218
show databases;
create databases db1;
show databases;

打开navicat
创建链接
连接选项
ip
这里特别提醒,若出现容器一直无法开启,注意是否是进入了刚才创建的mysql路径!!!注意你如果是阿里云需要把3307端口打开

Tomcat部署
案例:需求
在Docker容器中部署Tomcat, 并通过外部机器访问Tomcat部署的项目
案例:实现步骤
搜索tomcat镜像
和mysql一样

docker search tomcat
docker pull tomcat
创建容器,设置端口映射,目录映射
mkdir ~/tomcat
cd tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

直接访问宿主机的ip地址加端口号,显示空项目
空
创建文件在这里插入图片描述
可以看到具体内容chen_dioecare

Nginx部署
案例:需求
在Docker容器中部署nginx,并通过外部机器访问nginx
案例:实现步骤
一样

docker search nginx
docker pull nginx
mkdir nginx
cd nginx/
mkdir conf
cd conf/
vi nginx.conf

编辑内容如下

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

退回到nginx目录
cd …
pwd
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

访问宿主机的ip不用加端口,因为默认80,发现403页面显示,因为什么都没有,图就不放了。

cd html/
vi index.html
输入
<h1>chen_dioecare_nginx</h1>

保存后,再浏览器输入ip,发现出现chen_dioecare_nginx

Redis部署

直接写了,这么多个实例,各位看官们应该也懂了

docker search redis
docker pull redis:5.0。3
docker run -id --name=c_redis -p 6379:6379 redis:5.0.3

我使用了Redis Desktop Managerredis

Dockerfile

Docker镜像原理

  • 思考:
    1.docker镜像的本质是什么?
    答案:分层的文件系统
    2.docker中一个centos镜像为什么只有200Mb,而一个centos操作系统的iso文件要几个g
    答案:Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
    3.docker中一个tomcat镜像为什么有500mb,而一个tomcat安装包只有70mb
    答案:docker中镜像是分层的,tomcat虽然只有70多mb,但是他需要依赖父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小有500多mb

解答:
docker镜像原理:
1.最底层的bootfs,并使用宿主机的bootfs
2.内核一样,所以在linux下安装win内核,不行因为内核不能用
3.rootfs基础镜像(centos和ubuntu)
4.往上叠加其他的镜像文件
比如tomcat,jdk

镜像制作
1.容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称

docker commit f7cc7e0afb48 chen_tomcat:v1.0
docker images
docker save -o chen_tomcat.tar
docker images
docker load -i chen_tomcat.tar

Dockerfile概念及作用

  • dockerfile是一个文本文件
  • 包含了一条条指令

Dockerfile关键字
案例
需求:
自定义centos7镜像。要求:
1.默认登录路径/usr
2.可以使用vim
案例:实现步骤
1.定义父镜像:FROM centos:7
2.定义作者信息:MAINTAINER chen <[email protected]>
3.执行安装vim命令: RUN yum install -y vim
4.定义默认的工作路径: WORKDIR /usr
5.定义容器启动执行的命令: CMD /bin/bash

cd /home
mkdir docker-files
cd docker-files/
vi centos_dockerfile

输入步骤中的文字

FROM centos:7

MAINTAINER chen [email protected]

RUN yum install -y vim
WORKDIR /usr

cmd /bin/bash

docker build -f ./centos_dockerfile -t chen_centos:v1.0 .

注意最后面还有个“.”这是一个寻址的路径
有5步, 就是5条命令

docker images
docker ps -a
docker run -it --name=c2 chen_centos:v1.0

看到一开始路径是/usr
使用vim 发现可用

Docker Compose
1.利用dockerfile定义运行环境镜像
2.使用docker-compose.yml 定义组成应用的各服务
3.运行docker-compose up 启动应用

安装docker compose

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

卸载docker compose

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

ok,大致的内容就这么多。还有需要的可以留言。我会继续补充

发布了5 篇原创文章 · 获赞 6 · 访问量 988

猜你喜欢

转载自blog.csdn.net/TodChen_Blogger/article/details/105466407