马轩

个人主页

欢迎来到我的个人站~


Docker

Docker

Docker的指令:

Docker 命令 --help ## 帮助命令

Docker 镜像命令

C:\Users\HIT\Desktop\hithesis>docker images
REPOSITORY                   TAG       IMAGE ID       CREATED        SIZE
dustincys/tinytex-hithesis   latest    8f094ecdf86b   3 months ago   744MB

#解释
repository 镜像的仓库
tag        镜像的标签
image id   镜像的id
created    创建镜像的时间
size       镜像的大小

#可选项
 -a -All 显示所有
 -q -quiet 只显示id

Docker 搜索命令

C:\Users\HIT\Desktop\hithesis>docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11419     [OK]
mariadb                           MariaDB Server is a high performing open sou…   4339      [OK]
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   847                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   91
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   88
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                   [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         49
prom/mysqld-exporter                                                              42                   [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                   [OK]
tutum/mysql                       Base docker image to run a MySQL database se…   35
linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   31
schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   30                   [OK]
mysql/mysql-router                MySQL Router provides transparent routing be…   21
centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20
arey/mysql-client                 Run a MySQL client from a docker container      18                   [OK]
fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   16                   [OK]
genschsa/mysql-employees          MySQL Employee Sample Database                  7                    [OK]
yloeffler/mysql-backup            This image runs mysqldump to backup data usi…   7                    [OK]
openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6
devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offici…   3
ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                    [OK]
jelastic/mysql                    An image of the MySQL database server mainta…   2
centos/mysql-80-centos7           MySQL 8.0 SQL database server                   1
widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   1                    [OK]
vitess/mysqlctld                  vitess/mysqlctld                                1                    [OK]

# 可选项,通过收藏数目来过滤
	--filter=stars=3000 

Docker 下载镜像

docker pull ...
#默认使用 :last 版本

docker 删除镜像

docker rmi -f 镜像id

容器命令

说明:我们有了镜像才能使用容器,linux,下载一个centos 镜像来进行测试。

docker pull centos

创建容器并启动

docker run [可选参数] image

#参数说明
--name = "Name"    容器名称 tomcat1 tomcat2 用来区分容器
-d                 后台运行
-it                使用交互方式运行,进入容器进行查看
-p                 指定容器的端口 -p 8080:8080

docker run -it centos /bin/bash
# 启动并运行容器

# 推出当前容器
exit
这种直接推出的方式就会导致容器中止了,

# 查看当前所有的容器
docker ps

# 可选参数
	-a 所有
	-n 最近的容器 
	docker ps -n=1
	
#删除容器
docker rm 容器id

# 开启容器 
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

容器的其他命令

后台启动容器:

docker run -d 镜像名

#常见的坑,docker 容器使用 后台使用,就必须要有一个前天服务,docker发现没有应用,就会自动停止

查看日志 docker logs

docker logs -tf -tail number 容器id

查看容器中的进程信息:

docker top 容器id

UID                 PID                 PPID                C                   STIME               TTY                 TIME     
root                1473                1453                0                   12:55               ?                   00:00:00 
root                1649                1473                0                   12:58               ?                   00:00:00

#查看出来一些容器本身的信息
docker inspect 容器id

#进入当前正在运行的容器,由于我们容器平时都在后台运行的,
docker exec -it 容器id
docker attach 容器id

#exec 相当于启动了一个新的终端
#attach 进入容器正在运行的终端,不会去启动一个新的进行.


将数据从容器内拷贝到容器外.

docker cp 容器id:容器内部的路径 目的的主机路径

可视化

  • portainer

    docker run -d -p 8088:9000  --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    
  • Rancher(CI/CD再用)

对于分层的理解.

Docker镜像都是只读的,当容器启动的时候,一个新的可写层加载到镜像的顶部.

这一层就是我们通常所说的容器层,容器之下都叫做镜像层.

容器数据卷:

对于docker而言,如果数据都在容器中,如果容器被删除了,数据就会丢失!需求就是:数据可以持久化

MySQL,容器删除了,就会删库跑路?

容器之间可以有一个数据共享技术! docker容器中的产生的数据,同步到本地!

这就是卷技术,目录的挂载,将我们容器内的目录,挂载到linux上面!

image-20210917125627197

总结:容器的持久化和同步操作,同时容器之间也是可以实现数据共享的。

使用容器卷

docker run -it -v C:\Users\HIT\Desktop\hithesis\home\test:/home centos  /bin/bash

将本地的home/test 路径下面的内容跟centos中的./home文件夹做一个同步.

docker run -d -p 3310:3306 -v C:\Users\HIT\Desktop\hithesis\home\mysql\conf:/etc/mysql/conf.d -v C:\Users\HIT\Desktop\hithesis\home\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql

#运行MySQL容器:
-d 后台运行
-p 指定端口应声
-v 卷挂载
-e 环境配置
--name 容器名称

就算我们将容器整个删除,挂载在本地的容器卷也不会被删除。

具名挂载和匿名挂载

C:\Users\HIT>docker run -d -p 3310:3306 -v C:\Users\HIT\Desktop\hithesis\home\mysql\conf:/etc/mysql/conf.d -v mySql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
b3649f02653937f4815a412e95e3ec55afaa2b3c1ac8d42d60965c296f5c4d6a
# -v 卷名:容器内部路径
# 查看以下所有卷
docker volume ls
# 查看该卷
docker inspect mySql

C:\Users\HIT>docker volume inspect mySql
[
    {
        "CreatedAt": "2021-09-17T07:12:41Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mySql/_data",
        "Name": "mySql",
        "Options": null,
        "Scope": "local"
    }
]

"/var/lib/docker/volumes/mySql/_data",这个就是卷在本地存放的位置,而且绝大多数时候都是使用的就是具名挂载。

# 如何确定是具名挂载,匿名挂载,还是指定路径挂载
-v 容器内路径      #匿名挂载
-v 卷名:容器内部挂载 # 具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载

有的时候在容器内路径中会多一个 ro 或者 rw 
ro 表示在容器内进行 readonly
rw 表示 read write

dockerfile

dickerfile就是用来构建 docker 镜像的构建文件! 他就是一个命令脚本。

通过这个脚本可以生成镜像,镜像是一层层的,脚本一个个的命令,每一个命令就是一层。

#首先创建一个dockerfile文件,名字可以随机,建议Dockerfile
#文件中的指令

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "--end--"
CMD /bin/bash


#构建指令
docker build -f  ./dockerfile1 -t maxuan/centos:1.0 .

容器间数据共享

docker run -it --name docker01 maxuan/centos:1.0

docker run -it --name docker02 maxuan/centos:2.0 --volumes-from docker01 maxuan/centos:1.0
#这样就可以获取到 docker01容器中的数据卷,而且是同步的,即使将docker01 删除了 也可以获取到 volume01 和 volume02这两个文件夹。

#多个mysq数据同步
docker run -d -p 3310:3306 -v C:\Users\HIT\Desktop\hithesis\home\mysql\conf:/etc/mysql/conf.d -v mySql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql

docker run -d -p 3310:3306 -v C:\Users\HIT\Desktop\hithesis\home\mysql\conf:/etc/mysql/conf.d -v mySql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql

Dockerfile

dockerfile 是用来构建docker镜像的文件,命令参数脚本!

构建步骤:

1、编写一个cokerfile文件

2、docker build 构建成为一个镜像

3、docker run 运行镜像。

4、docker push 发布镜像(docker hub、阿里云镜像仓库)

很多镜像环境都是基础包,很多功能都没有,我们通常会自己去搭建一个自己的镜像。

dockerfile的基础知识:

1.每一个保留指令都必须是大写字母

2.执行从上到下顺序执行

3.#表示注释

4.每一个指令 都会提交创建一个新的镜像层,并提交。

Dockerfile 的指令

FROM              # 基础镜像,一切从这里开始
MAINTAINER        #镜像是谁写的,姓名+邮箱。
RUN               #镜像构建的时候需要运行的命令。
ADD               #步骤:tomcat 镜像,这个tomcat的压缩包。 会自动解压压缩包
WORKDIR           #镜像的工作目录
VOLUME            # 挂载的目录
EXPORT            # 保留端口配置
CMD               # 指定这个容器启动时候的命令,CMD只有最后一个回生效
ENTRYPORT         # 指定这个容器启动时候的命令,可以追加命令。
COPY              # 类似于ADD,将我们文件拷贝到镜像中
ENV               # 构建的时候添加环境变量

构建自己的Docker

Docker Hub 中99%的镜像就是从这个基础镜像过来的 FROM Scratch

创建一个自己的centos

# 1.编写自己的 dockerfile
FROM centos
MAINTAINER maxuan@hit.edu.cn

EVN MYPATH /usr/local
WORKDIR $MYPATH
 
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "===end==="
CMD /bin/bash

#构建镜像

docker build -f mydockerfile-centos -t mycentos:1.0

# 2.构建我们的镜像
docker build -f dockerfile1 -t mycentosmx:1.0 .

# 3.运行容器 
docker run -it mycentosmx:1,0
pwd
# /usr/local

与之前的对比,之前的centos没有工作目录,就是直接进入根路径。

支持了vim 还有网络端口暴露,还有net-tools

docker history image id 就可以查看每一个docker image的构建过程。

Docker 命令中很多命令都是十分的相似的。

发布自己的docker镜像

1、地址https://hub.docker.com/ 注册自己的账号
2、确定这个账号可以登录
3、在我们的服务器上提交自己的代码

docker login --help

docker tag 5e1f024 basicbuttons/mycentos:1.0

docker push basicbuttons/mycentos:1.0
这样就可以发布到 dockerhub 上了

image-20210924212210106

Docker网络

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦