docker笔记(docker超详细的笔记)

一:基础环境搭建

下面的内容系统版本都是Centos 7

1:安装需要的软件包

首先需要卸载原先的docker版本(旧版本和新版本不兼容)

yum remove docker docker-client docker-client-latest  docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

yum环境需要网络yum源仓库

yum install -y yum-utils device-mapper-persistent-data lvm2

2:配置阿里docker源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3:安装docker

yum install -y docker-ce

4:安装后查看已安装的docker版本

docker -v

5:查看docker版本详细信息

docker info

二:docker的简单操作

1:启动一台虚拟机查看

docker run -it centos

在这里插入图片描述

2:查看虚拟机的状态

docker ps

在这里插入图片描述

3:查看docker虚拟机的ip

docker inspect 7b37ffc9ec34

解析:docker inspect 虚拟机ID(使用docker ps查看的CONTAINER ID 列)
在这里插入图片描述

4:连接docker容器

docker exec -it 7b37ffc9ec34 bash

解析:docker exec -it 虚拟机的ID bash
在这里插入图片描述

三:镜像的管理

简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。

1:配置国内的docker源

docker支持的容器列表

 vi /etc/docker/daemon.json 

插入以下内容

{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}

重启docker服务

systemctl restart docker

2:拉取nginx镜像

解析:使用pull拉取镜像

docker pull nginx:1.12

解析:冒号后面加上版本号,不加默认下最新版本

3:查看现有的docker镜像

docker images

扩展:查看仓库所有匹配镜像

docker search -f mysql

4:查看docker分层信息

在这里插入图片描述
镜像不是一个单一的文件,而是有多层构成。
Docker镜像默认存储在/var/lib/docker/overlay2中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层

docker history nginx:1.12

解析:nginx:1,12 指定查看的镜像加具体的版本信息(只能查看本地已缓存的镜像文件)

5:docker支持的驱动

在这里插入图片描述
在这里插入图片描述

四:镜像管理命令

1:拉取镜像

docker pull nginx:1.12

解析:冒号后面加上版本号,不加默认下最新版本

2:查看现有镜像

docker images

3:删除镜像

docker mage rm 镜像:标签

在这里插入图片描述

docker rmi 镜像:标签

在这里插入图片描述

4:镜像标签

打tag标签

docker tag nginx:1.11 nginx:a1

5:导出镜像(拉取的镜像文件)

docker save centos > centos1

6:导入镜像

docker load < centos

7:运行容器(运行的虚拟机)

docker run -itd centos 

8:导出容器

docker export 容器id > centos.tar 

解析:查看容器id:docker ps

9:导入容器(保存为镜像仓库)

docker import centos.tar centos1:12

解析:centos1:12 是创建的一个镜像标签(如果没有则镜像名称显示为none)

五:容器管理

docker容器默认存放位置

docker容器默认存放于/var/lib/dockercontainers/

1:创建一个容器

docker run -itd --name a1 centos

解析:
–name 定义容器的名称(可以理解为容器的标签)
centos 创建容器使用的镜像(通常通过pull命令拉取)
可使用快捷键Ctrl + P + Q 来退出容器时不自动停止

扩展:创建容器的常见选项

指令描述资源限制指令描述
-i, --interactive交互式-m,–memory容器可以使用的最大内存量
-t, --tty分配一个伪终端–memory-swap允许交换到磁盘的内存量
-d, --detach运行容器到后台–memory-swappiness=<0-100>容器使用SWAP分区交换的百分比(0-100,默认为-1)
-a, --attach list附加到运行的容器–memory-reservation内存软限制,Docker检测主机容器争用或内存不足时所激活的软限制,使用此选项,值必须设置低于—memory,以使其优先
–dns list设置DNS服务器–oom-kill-disable当宿主机内存不足时,内核会杀死容器中的进程。建议设置了-memory选项再禁用OOM。如果没有设置,主机可能会耗尽内存
-e, --env list设置环境变量–cpus限制容器可以使用多少可用的CPU资源
–env-file list从文件读取环境变量–cpuset-cpus限制容器可以使用特定的CPU
-p, --publish list发布容器端口到主机–cpu-shares此值设置为大于或小于默认1024值,以增加或减少容器的权重,并使其可以访问主机CPU周期的更大或更小比例
-P, --publish-all发布容器所有EXPOSE的端口到宿主机随机端口
-h, --hostname string设置容器主机名
–ip string指定容器IP,只能用于自定义网络
–link list添加连接到另一个容器
–network连接容器到一个网络
–mount mount挂载宿主机分区到容器
-v, --volume list挂载宿主机目录到容器
–restart string容器退出时重启策略,默认no[always|on-failure]
–add-host list添加其他主机到容器中/etc/hosts

扩展创建容器命令

docker run -itd --name a2 -e a=123 -p 8080:80 --restart=always --memory 1024m --cpus 1 centos

解析:

-e a=123 创建容器是指定变量
-p 8080:80  将宿主机的8080端口映射到容器的80端口
--restart=always 容器关闭时自动启动
--memory 1024m 指定容器最大只能使用1024M的内存
--cpus 指定容器只能使用一核CPU

2:连接一个开启的容器

使用attach连接

docker attach a1

解析:a1可替换为容器的ID

使用exec连接

docker exec -it a1 bash

使用该操作可以在容器外使用命令

docker exec a1 ls /root

3:容器的状态操作

关闭开启的容器

docker stop a1

打开关闭的容器

docker start a1

将开启的容器重新启动

docker restart a1

将关闭的容器删除

docker rm a1

4:实时查看容器使用的资源

docker stats 

解析:后面可跟容器名查看指定的容器资源使用

在这里插入图片描述

5:查看容器的详细信息

docker inspect nginx1

6:查看运行的容器的进程

docker top nginx1

在这里插入图片描述

7:将导出的容器提交为一个镜像

docker commit a1 a1:20

在这里插入图片描述

8:拷贝一个文件进容器里面

docker cp 文件名/文件目录 容器名:/目录

六:应用数据的管理

参数

docker volume --help
选项解析
create创建
inspect查看卷信息
ls查看已有卷
prune清理卷缓存
rm删除卷

1:创建卷

docker volume create centos-vo1

解析:centos-vo1 是起的卷名

2:查看已有卷

docker volume ls

查看卷的详细信息

docker volume inspect centos-vo1

在这里插入图片描述

3:使用卷创建一个容器

一个卷可挂载多个容器

docker run -itd --name volume-text --mount  src=centos-vo1,dst=/var/www/html centos

解析:

rc=centos-vo1   使用哪个卷
dst=/var/www/html centos 将容器的那个目录挂载到卷里

这个等于

docker run -itd --name volume-text -v  centos-vo1:/var/www/html centos

mount 支持选择格式
-v 不支持

扩展:挂载宿主目录

docker run -itd --name volume-text --mount type=bind,src=/root/123,dst=/var/www/html centos

解析:指定挂载点的格式为bind(目录格式)(原文件会隐藏)

七:网络管理

1:四种网络类型

1:bridge(桥接模式)

默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
在这里插入图片描述

2:host

容器不会获得一个独立的network namespace,而是与宿主机共用一个。

3:none

获取独立的network namespace,但不为容器进行任何网络配置。

4:container

与指定的容器使用同一个network namespace,网卡配置也都是相同的。

八:实战:使用docker搭建LNMP平台

项目目标
创建两个docker容器
1:创建一个mysql的docker容器
2:创建一个PHP的docker容器

1:创建一个网络

docker network create lnmp

2:创建docker卷

docker volume create mysql-vol

2:创建mysql的容器

拉取mysql的容器镜像文件

docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8

3:创建数据库

docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"' 

4:创建PHP的容器

docker run -itd --name lnmp_web --net lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

解析:我这里宿主机端口88(我的环境中PHP默认80端口已被使用)

5:以wordpress博客为例测试

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
tar zxf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot

6:浏览器测试访问

http://IP:88/wordpress
如果出现访问不了的时候请配置相关的防火墙和selinux

九:Dockerfile

1:Dockerfile指令

在这里插入图片描述

扩展:创建搭建PHP网站环境镜像

1:编写dockerfile文件内容

创建dockerfile文件

touch dockerfile-PHP

添加一下内容

FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
2:构建镜像
Usage:  docker image build [OPTIONS] PATH | URL | -
Options:
-t, --tag list     # 镜像名称
-f, --file string  # 指定Dockerfile文件位置

示例:
docker build . 
docker build -t shykes/myapp .
docker build -t shykes/myapp -f /path/Dockerfile /path

扩展:解析搭建PHP的dockerfile文件内容

FROM centos:7
#FROM代表dockerfile使用哪个镜像文件,作为基础环境
	
MAINTAINER www.aliangedu.com
#MAINTAINER代表作者信息

RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
#RUN开头行表示在容器里执行什么命令

ADD php-5.6.31.tar.gz /tmp/
#ADD代表拷贝文件到哪个目录(等于cp命令)但是如果文件是压缩文件它会自动解压


RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
    
COPY php.ini /usr/local/php/etc
#COPY代表拷贝文件到哪个目录(等于cp命令)

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
#WORKDIR设定容器内的工作目录

EXPOSE 9000
#声明容器运行的端口

CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
#最后一个执行,通常作为最后一行,启动容器
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starry-sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值