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上面!
总结:容器的持久化和同步操作,同时容器之间也是可以实现数据共享的。
使用容器卷
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 上了