docker基础 (docker入门、dockerfile、将镜像发布到阿里云)

开始之前

docker 是一个开源的应用容器引擎。
Docker 官网:https://www.docker.com
Github Docker 源码:https://github.com/docker/docker-ce

1、docker安装

1.1、下载和安装

linux下安装doker:

centos下,查看centos的版本:cat /etc/redhat-release
在这里插入图片描述
需要版本在6.5以上

(这里我的是centos 8,8以下的版本,以下步骤可能并不适用)

1、安装依赖

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

2、添加yum仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache

3、安装docker-ce

先输入
dnf -y  install docker-ce --nobest

若报错根据提示输入
dnf -y  install docker-ce --allowerasing

4、设置开机自启

systemctl enable --now docker

5、添加当前用户到docker group

usermod -aG docker $USER
newgrp docker

6、查看docker版本

docker version

在这里插入图片描述

2、运行与停止

查看docker的运行状态

systemctl status docker

查看状态后,按q退出

启动docker

systemctl start docker

关闭docker

systemctl stop docker

在centos7以前启动docker指令是:service docker start

3、从docker的镜像仓库下载

这里我使用阿里云的镜像,也可以使用网易的镜像。
阿里云镜像网址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在这里插入图片描述

修改docker配置文件,并重启docker

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://239fj6jx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如上指令可以直接在终端运行,也可以改成如下方式执行
在这里插入图片描述

如果是centos7以下版本指令不同

注意这上面的https:/后面的内容,每个人的是不一样的

查看是否配置成功:docker info
在这里插入图片描述
如果想使用网易云的镜像,可以把地址换成http://hub-mirror.c.163.com

4、运行

1、docker 镜像:镜像就是一个未运行的文件
2、docker 容器:容器里面装着一个正在运行的镜像

3、docker每次运行一个镜像是就会生成一个容器,我们可以对容器进行开始、暂停、删除等操作,还可以用同一个镜像开多个容器(容器就像一个类的new多个对象一样)

4、docker的文件系统原理:UnionFS (联合文件系统)
例如一个tomcat的镜像
在这里插入图片描述

4.1、运行hello-world

用docker运行hello-world,输入指令

docker run hello-world

得到如下结果
在这里插入图片描述
也就是docker会先在本地找,有没有hello-world这个项目,如果没有就去云端找。

4.2、镜像命令

1、列出本地仓库镜像

docker images

后面可以追加指令:-a(列出所有)、-q(只显示镜像id)、–digests(显示摘要)、–no-trunc(显示完整信息)
例:在这里插入图片描述

2、从docker官网查找某个镜像

docker search 镜像名

后面可以追加指令:-s(按收藏排名查)、–automated(只查automated类型镜像)、–no-trunc(显示完整信息)
例:在这里插入图片描述

3、下载镜像(配置后从阿里下载)

docker pull 镜像名

后面可以追加版本号:不写表示最新的版本
例:在这里插入图片描述

4、删除某个镜像

docker rmi 镜像名

强制删除:docker rmi -f 镜像名
如果想删除多个,直接在后面写多个镜像名就可以了,空格分隔
全部删除:docker rmi -f $(docker images -qa)
删除容器:docker rm

4.3、容器命令

先用docker下载一个centos

docker pull centos

启动一个镜像的指令
在这里插入图片描述
常用参数:
在这里插入图片描述
更详细的参数

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 设置环境变量;

--env-file=[]: 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

-m :设置容器使用内存最大值;

--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

--link=[]: 添加链接到另一个容器;

--expose=[]: 开放一个端口或一组端口;

--volume , -v: 绑定一个卷

根据centos镜像id,运行
在这里插入图片描述

-it 就是运行后打开 镜像软件的终端

在这里插入图片描述
后台静默启动
在这里插入图片描述

-d就是后台启动

后台启动后会马上被关闭
在这里插入图片描述
如果想让它后他一直运行着,得给他一个一直运行的任务

docker run -d centos /bin/sh -c "while true;do echo hello kkkkk;sleep 2;done"

在这里插入图片描述
输出日志试试
在这里插入图片描述

现在我们查看docker运行的进程查看docker容器里的centos的docker运行的进程
在这里插入图片描述
在这里插入图片描述
输入exit退出docker
在这里插入图片描述

上面输入的exit退出docker,是完全退出,
使用快捷键ctrl+P+Q就是暂时退出。

如下是我用同一个镜像id,运行的两个容器
在这里插入图片描述
查看历史运行的docker内容
在这里插入图片描述
查看所有容器(-a:包括运行的、没运行的)

docker ps -qa

查看正运行的容器

docker ps -q

下面是docker ps 指令的参数

-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

删除一个容器

docker rm -f 容器id

删除所有容器

docker rm -f $(docker ps -qa)

删除所有容器也可以这样写:docker ps -qa | xargs docker rm

查看容器日志

docker logs -f -t --tail 数字 容器id

-t:加入时间戳
-f:最新日志
–tail:显示多少条

执行容器的指令

docker exec -t 容器id 容器指令

在这里插入图片描述
从容器内拷贝文件到主机

docker cp 容器id:文件路径/文件名  主机路径

4.4、提交镜像

提交镜像

docker commit 

-m:提交的描述信息
-a:作者

5、docker 常用指令集合

systemctl status docker        查看状态
systemctl start docker         启动docker
docker images                  查看本地镜像

docker pull 镜像名              下载镜像
docker run -it 0d120b6ccaa8    根据id运行一个镜像(生成容器),并打开其终端
exit                           退出镜像的终端(会结束容器)
ctrl+P+Q                       暂时退出容器的终端
docker ps                      查看正运行的容器
docker ps -a                   查看所有容器
docker start 容器id             开始一个容器
docker stop 容器id              停止一个容器
docker kill 容器id              强行停止容器
docker rm -f  容器id            删除一个容器

docker top 容器id               查看容器里的进程
docker logs 容器id              查看日志
docker inspect 容器id           查看每层的结构

docker attach 容器id            重新进入容器
docker exec -t 容器id 容器指令   使用正在运行容器执行容器的指令
docker cp 容器id:文件路径/文件名  主机路径 (复制文件到主机)
docker inspect 容器id           获取容器/镜像的元数据

docker run -it -p 8888:8080 tomcat:80   (使用外部主机端口8888启动)
docker commit -a="zhangshan" -m=“我改过的tomcat“ eb493a2a75fd mydemo/tomcat1000:1.0   (保存正在运行的容器为一个新镜像)
docker run -it -v /share-a:/share-b tomcat:8.0 (建立共享文件夹启动)

部分指令解释
在这里插入图片描述

6、docker运行tomcat镜像实例

先下载一个tomcat8.0
在这里插入图片描述
运行
在这里插入图片描述

-p(小写的p):这里的8888是主机对外暴露的端口,8080是tomcat的端口

例如这里我的主机是192.168.90.22
在这里插入图片描述
如果把如上指令的p小写改成大写P,就会自动分配ip地址
在这里插入图片描述
在这里插入图片描述
如果想要编辑tomcat里面的东西
在这里插入图片描述
把修改后的tomcat打包成一个新的镜像

docker commit -a="zhangshan" -m=“我改过的tomcat“ eb493a2a75fd mydemo/tomcat1000:1.0

在这里插入图片描述
如果想运行的时候,让tomcat在后台运行
在这里插入图片描述

7、docker容器数据卷(共享文件夹)

7.1、主机和容器间使用共享文件夹

容器数据卷:就是实现主机和容器间共享文件夹
在这里插入图片描述
在这里插入图片描述
查看共享文件夹绑定成功没:docker inspect 容器id
在这里插入图片描述
找到Binds,有内容就是绑定成功了
在这里插入图片描述
现在主机的share-m下新建一个host.txt
在这里插入图片描述
在对应的share-n里面能找到host.txt
在这里插入图片描述
带权限的共享文件
在这里插入图片描述
ro表示 容器里只有写的权限

如果遇到报错
在这里插入图片描述
例:
在这里插入图片描述

7.2、DockerFile(例,建多个共享文件夹)

DockerFile是一个镜像的构建文件

构建docker file文件
在这里插入图片描述
输入内容

# volume test
FROM centos
VOLUME ["/s1","/s2"]
CMD echo "finished,-----success1"
CMD /bin/bash

上面内容大致意思就是 继承自centos,容器卷文件夹s1、s2

构建(执行)dockerfile文件
在这里插入图片描述
查看生成的镜像
在这里插入图片描述
现在运行我们自己生成的mycentos(含s1、s2两个共享文件夹)
在这里插入图片描述
在s1里面新建一个01.txt
在这里插入图片描述
查看主机共享目录
在这里插入图片描述
复制这两个路径
在这里插入图片描述
在主机内进入这个目录,看看有没有我们新建的文件01.txt
在这里插入图片描述

7.3、容器间共享文件夹

运行两个镜像,让镜像2的volums来自镜像1
在这里插入图片描述
现在镜像1、镜像2、主机之间,三者的文件都是共享的

然后再新建一个镜像3,三个镜像互相共享,3和2都继承自1,
发现3与2、1、主机互相共享,
如果再新建一个镜像4,继承自3,然后删除3,
4与2、1、主机依然共享。

步骤总结:
首先新建一个DockerFile文件,
然后docker build生成一个新的镜像
运行这个镜像就可以让它和主机共享多个文件夹

想让其他镜像也和它共享,就让其他镜像继承自这个镜像

7.4、DockerFile文件语法

7.4.1、基础知识

1、dockerFile的保留字必须是大写,且后面至少跟一个参数
2、指令从上到下顺序执行
3、#表示注释
4、每条指令都会创建一个新的镜像层,并对镜像进行提交

7.4.2、dockerfile的保留字

1、FROM 后面跟一个镜像,也就是当前镜像继承自哪个镜像
2、MAINTAINER 跟作者名字、邮箱
3、RUN 容器构建时要执行的命令
4、EXPOSE 容器对外暴露的端口
5、WORKDIR 指定容器登录后的工作目录
6、ENV 设置环境变量

ENV例:
ENV MY_PATH /usr/mytest
WORKDIR $MY_PATH

7、ADD 拷贝进镜像(可以处理URL和tar压缩包)
8、COPY 拷贝进镜像

COPY例:
COPY src dest
COPY["src","dest"]

9、VOLUME 容器数据卷(共享文件夹)
10、CMD 指定容器要运行的命令

cmd 可以有多个,只有最后一个有效,并且会被docker run之后的参数替换

CMD 例:
CMD <命令>
CMD ["可执行文件","参数1","参数2"...]

11、ENTRYPOINT 指定容器要运行的命令(可以有多个指令生效)
12、ONBUILD 本镜像被继承后出发oubuild

7.4.3、CMD、ENTRYPOINT案例对比

首先要知道基础镜像scratch,docker hub中99%的镜像都FROM自它。

案例一:我们来新建一个mycentos镜像,使得它有如下功能:
vim
更改登录后的默认路径
支持ipcongfig指令

1、新建文件Dockerfile,并编写如下内容
在这里插入图片描述
2、构建新镜像
在这里插入图片描述
3、运行
在这里插入图片描述
4、列出镜像历史
在这里插入图片描述

案例二:
新建文件Dockerfile3,并填入一下内容
在这里插入图片描述
构建
在这里插入图片描述
运行
在这里插入图片描述
docker run -it myip相当于在myip容器里面运行了 curl -s http://ip.cn
如果我们现在运行docker run -it myip -i,会报错
因为这相当于curl -s http://ip.cn被覆盖了
在这里插入图片描述
如果我们想能在后面追加-i,需要在dockerfile里面用到ENTRYPOINT指令
在这里插入图片描述
在这里插入图片描述

7.4.4、ONBUILD案例

ONBUILD例:
在这里插入图片描述
把这个镜像打包成myip_father
然后再新建一个dockerfile,保存成镜像并运行
在这里插入图片描述

8、自定义tomcat 9镜像

首先下载好jdk 1.8和tomcat 9
在这里插入图片描述
新建一个Dockerfile文件如下
在这里插入图片描述
构建新tomcat镜像
在这里插入图片描述

如上,在目0录起名dockerfile文件叫Dockerfile这个名字,构建时 就不需要”-f 文件名“

运行镜像,并配置共享文件夹、端口
在这里插入图片描述
把如上图命令分开写
在这里插入图片描述

–privileged=true,使得该容器拥有主机的root权限
关于权限参考这篇:https://blog.csdn.net/liuwei0376/article/details/100310462

用这个tomcat发布一个web工程
第一步:主机上,把web工程拷贝进共享文件夹
拷进去过后可以查看容器里有没有
在这里插入图片描述
然后重启容器

docker restart 容器id

9、安装mysql

下载mysql5.6

docker pull mysql:5.6

运行
在这里插入图片描述
重新进入容器

docker exec -it 容器id /bin/bash

在容器里登录mysql

mysql -uroot -p123456

在主机输入指令导出mysql所有数据

docker exec 容器id sh -c 'exec mysqldump --all-databases -uroot -p123456' > /myfile/all-databases.sql

10、安装redis

下载redis3.2

docker pull redis:3.2

运行
在这里插入图片描述
在主机里编写配置文件
在这里插入图片描述
写完配置文件,启动redis命令

docker exec -it 容器id redis-cli

然后编写redis的缓存内容
查看持久化文件是否生成
在这里插入图片描述

11、将本地镜像发布到阿里云

先将一个运行后,配置好的镜像打包
在这里插入图片描述
登录阿里云docker管理平台

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

先创建一个命名空间
在这里插入图片描述
在这里插入图片描述
然后再创建一个镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后将镜像推送到阿里云
先找到对应的仓库,点管理
在这里插入图片描述
找到将镜像推送到Registry
在这里插入图片描述
如上图在主机上输入第一句后会让你输入用户名和密码

在这里插入图片描述
如果设置的共有仓库,那么在阿里云里面就可以搜索到并下载

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值