即上篇,初识Docker后,本篇带来Docker的常用命令细解
相信最初学Docker的目的就是为了简化安装吧兄弟萌,接下来就开干,坑我来踩,干就完事啦!
下篇即安装搭建环境!!!!
深入Docker
1.首先打开帮助文档
1.先打开帮助文档
2.拉取Mysql
1.搜索Mysql
2.拉取镜像
# 这个命令表示默认拉取最新版
docker pull mysql
#指定版本 指定的版本
docker pull mysql:5.7
妈的,没设置加速之前好慢好慢,因为访问的是国外的
2.1设置一下国内官方镜像
在使用时,Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。该镜像库只包含流行的公有镜像。私有镜像仍需要从美国镜像库中拉取。
修改修改 /etc/docker/daemon.json
,当然啦你可能没有这个json,没关系,我也没有,所以我们直接创建一个就好了,在这个json里面复制这个进去
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启docker使他生效
systemctl restart docker
再次拉取 ,芜湖 起飞
4.Docker常用命令
1.删除镜像
现在拉取镜像咱们已经学会了是不是也得会删除呢?
#删除指定镜像
docker rmi -f 镜像id
#删除全部镜像
docker rmi -f ${docker images -aq }
删除指定镜像
2.容器命令
说明︰我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
3.新建容器并启动
docker run [可选参数]image
#参数说明
--name="Name" 容器名字tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口-p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)-p容器端口
容器端口
-P 随机端口
套娃套娃套娃啦兄弟们
运行并进入容器
退出容器
查看docker运行过得容器 与正在运行的容器命令
docker ps
docker ps -a
-n=? 表示最近创建的的容器
-q 只显示容器的编号
4.退出容器
exit 直接退出容器
ctrl+P+Q 退出容器但不停止
5.删除容器
docker rm 容器id 只能删除没运行的 删除运行会报错
docker rm -f $(docker ps -aq) 删除所有容器 正在运行的也能删除
docker ps -a -q|xargs docker rm 删除所有的容器
6.启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
docker run -d centos 确发现
docker ps 没有正在运行的容器???
问题docker ps,发现centos停止了
常见的坑: docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止 nginx,容器启动后,发现自己没有提供服务,就会立刻停止
进入正在运行的容器
docker exec -it 容器id /bin/bash
docker attach 容器id 进入容器正在运行的行
7.将容器内的文件 拷贝到主机
进入容器内,创建一个文件,退出容器并不会使数据丢失 删除容器才会丢失
[root@VM-8-7-centos /]# docker attach 66140df7b61c
[root@66140df7b61c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@66140df7b61c /]# cd home
[root@66140df7b61c home]# ls
[root@66140df7b61c home]# touch linlin.java
[root@66140df7b61c home]# ls
linlin.java
[root@66140df7b61c home]# ^C
[root@66140df7b61c home]# exit
exit
[root@VM-8-7-centos /]# docker ps -aq
66140df7b61c
7f02c16917b7
[root@VM-8-7-centos /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66140df7b61c centos "/bin/bash" 6 minutes ago Exited (130) About a minute ago bold_goldberg
7f02c16917b7 centos "/bim/bash" 6 minutes ago Created musing_dijkstra
[root@VM-8-7-centos /]# docker cp 66140df7b61c:/home/linlin.java /usr/local/src
[root@VM-8-7-centos /]# cd /usr/local/src
[root@VM-8-7-centos src]# ls
linlin.java
[root@VM-8-7-centos src]#
小结
5.docker 的提交
1.docker打包提交自己创造的镜像
docker commit -a="提交人" -m="提交的信息 或者叫备注" 容器id 创建的镜像名
6.容器数据卷(很重要)
1.容器数据卷
1.容器数据卷 通俗来说就是: 把容器内的文件夹跟主机进行挂载,类似vue的双向绑定,一边发生变化另一边也跟着变化。借此实现数据共享,数据持久化
。
还看不懂?
再简单一点 ,你有A文件夹,我有B文件夹,我们进行了挂载,我创建一个xiaolin.java文件,你什么都不用干但是也多了一个xiaolin.java文件。这就是容器数据卷!!!
#创建一个容器并跟主机指定文件夹进行挂载
docker run -d -v /主机目录/:/容器目录 centos
-v可以有多个 可以有多个挂载
2.具名挂载
#具名挂载 -v 名称:/容器名
[root@VM-8-7-centos /]# docker run -it -v xiaolin:/home centos
[root@VM-8-7-centos /]# docker volume ls
DRIVER VOLUME NAME
local 64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
local 64f5657cc4084a0b83e585f6757e768b5b8adb774c91b1f720e1fa341fe179ae
local xiaolin
#查看指定容器名的状态
[root@VM-8-7-centos /]# docker volume inspect xiaolin
[
{
"CreatedAt": "2021-01-29T15:09:41+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/xiaolin/_data", 主机地址
"Name": "xiaolin",
"Options": null,
"Scope": "local"
}
]
[root@VM-8-7-centos /]#
3.匿名挂载
#匿名挂载
[root@VM-8-7-centos volumes]# docker run -d -v /home centos
952fe1b6a34d04ed7ba805c7f93b7d38412024205615b94d8e70f46e8502b741
#查看所有的数据卷
[root@VM-8-7-centos /]# docker volume ls
DRIVER VOLUME NAME
local 64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
local 64f5657cc4084a0b83e585f6757e768b5b8adb774c91b1f720e1fa341fe179ae
local xiaolin
#查看指定的数据卷
[root@VM-8-7-centos /]# docker volume inspect 64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698
[
{
"CreatedAt": "2021-01-29T11:03:06+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698/_data",
"Name": "64b4306de114aa5aa6448044d1f6e1eadc76b23a6c8df946b8b71b2c37bec698",
"Options": null,
"Scope": "local"
}
]
[root@VM-8-7-centos /]#
7.DockerFile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
1.创建一个自己的镜像
#按顺序执行
cd /home
mkdir docker-test-volume
vim dockerfile01
#脚本内容
FROM centos
VOLUME ["volum01","volume02"]
CMD echo "------end---------"
CMD /bin/bash
# 生成一个自己的镜像
[root@VM-8-7-centos docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t xiaolin/centos1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["volum01","volume02"]
---> Running in d01be81f85bb
Removing intermediate container d01be81f85bb
---> 410e0c7971af
Step 3/4 : CMD echo "------end---------"
---> Running in 418cf8c30dac
Removing intermediate container 418cf8c30dac
---> b837e1c0d654
Step 4/4 : CMD /bin/bash
---> Running in e22f763735df
Removing intermediate container e22f763735df
---> 2e7e3038db1f
Successfully built 2e7e3038db1f
Successfully tagged xiaolin/centos1.0:latest
You have new mail in /var/spool/mail/root
[root@VM-8-7-centos docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xiaolin/centos1.0 latest 2e7e3038db1f 41 seconds ago 209MB
mytomcat1.0 latest 2d62d63e824d 4 hours ago 654MB
tomcat 9.0 345867df0879 8 days ago 649MB
tomcat latest 345867df0879 8 days ago 649MB
mysql 5.7 a70d36bc331a 10 days ago 449MB
redis latest 621ceef7494a 2 weeks ago 104MB
nginx latest f6d0b4767a6c 2 weeks ago 133MB
centos latest 300e315adb2f 7 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 6 months ago 79.1MB
2.启动镜像 查看挂载信息
#查看镜像
[root@VM-8-7-centos docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xiaolin/centos1.0 latest 2e7e3038db1f 41 seconds ago 209MB
mytomcat1.0 latest 2d62d63e824d 4 hours ago 654MB
tomcat 9.0 345867df0879 8 days ago 649MB
tomcat latest 345867df0879 8 days ago 649MB
mysql 5.7 a70d36bc331a 10 days ago 449MB
redis latest 621ceef7494a 2 weeks ago 104MB
nginx latest f6d0b4767a6c 2 weeks ago 133MB
centos latest 300e315adb2f 7 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 6 months ago 79.1MB
#启动自己的镜像
[root@VM-8-7-centos docker-test-volume]# docker run -it 2e7e3038db1f
[root@74ac8203c101 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volum01 volume02
[root@74ac8203c101 /]#
因为挂载的方式是匿名镜像 所以我们去找他的主机的地址看看是否成功了
进入数据卷创建一个文件
[root@18b25d82c16e /]# cd volum01
[root@18b25d82c16e volum01]# touch xiaolin.java
[root@18b25d82c16e volum01]# ls
xiaolin.java
[root@18b25d82c16e volum01]#
#先退出容器
#查看状态 找到mounts
[root@VM-8-7-centos docker-test-volume]# docker inspect 18b25d82c16e
#完成
[root@VM-8-7-centos docker-test-volume]# cd /var/lib/docker/volumes/2452d4b206cbf510bc9f887f1e03e577256f28ecc586e3118885212210f9345d/_data
[root@VM-8-7-centos _data]# ls
xiaolin.java
[root@VM-8-7-centos _data]#
8.数据卷容器(很重要)
什么是数据卷容器
很好理解吧兄弟们,就是被别的容器挂载的父容器,叫数据卷容器。
给大家画张图吧
操作命令
#先创建一个容器
[root@VM-8-7-centos docker-test-volume]#
docker run -it --name docker01 xiaolin/centos1.0 /bin/bash
#在创建第二个容器的时候指定数据卷
[root@VM-8-7-centos docker-test-volume]#
docker run -it --name docker02 --volumes-from docker01 xiaolin/centos1.0
测试
哪怕把docker01容器删除数据也不会丢失哦,想挂载多个也是没问题的呀我就没写了奥兄弟们
容器数据卷之间的共享
--volumes from 容器名
9.DockerFile 详解(很重要)
1.DockerFile是什么
DockerFile是用来创建镜像的一个文件! 命令参数的脚本!!!
构建步骤
1.编写一个dockerfile文件
2.docker build 构建成一个镜像
3.docker run 运行镜像
4.docker push 发布镜像到 docker hub 或者阿里云镜像仓库
我们先打开Docker Hub
搜一个来看看
再随便点击一个版本,他会跳到Git hub
看,他是不是跟我上面写的脚本类似!!
接下来找了一张百度的图详细解释 DockerFile里面的命令
这个也不错
基础知识:
1.每个关键字都必须是大写字母!
2.从上到下的执行顺序
3.#表示注释
4.每一个指令都会创建新的镜像层并提交!
步骤:开发 部署 运维
DockerFile:构建文件,定义一切的源代码
DockerImages:通过DockerFile生成的镜像,最终发布和运行项目
Docker容器:容器就是运行镜像提供服务的服务器
2.DockerFile的指令
FROM 基础镜镜像 一切从这里开始
MAINTAINER 告诉别人是谁写的 姓名 邮箱
RUN 镜像构建的时候需要执行的命令
ADD 添加内容 压缩包
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 暴露的端口配置
CMD 指定容器启动运行启动的命令,只有最后一个会生效 ,可替代
ENTRYPOINT 指定容器启动运行启动的命令,可以追加命令
ONBUILD 当构建一个被继承的DockerFile这个时候就会运行这个命令
COPY 类似ADD 将文件拷贝到镜像里面
ENV 构建的时候设置环境变量
懂了这些来联系一下兄弟们
3.练习
实战测试Tomcat,JDK镜像编写
Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch
,然后配置需要的软件和配置来进行的构建
1.准备tomcat,JDK的jar压缩包
2.编写dockerfile文件
列出本地镜像变更历史
[root@VM-8-7-centos src]# docker history 镜像id
IMAGE CREATED CREATED BY SIZE COMMENT
621ceef7494a 2 weeks ago /bin/sh -c #(nop) CMD ["redis-server"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 6379 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:df205a0ef6e6df89… 374B
<missing> 2 weeks ago /bin/sh -c #(nop) WORKDIR /data 0B
<missing> 2 weeks ago /bin/sh -c #(nop) VOLUME [/data] 0B
<missing> 2 weeks ago /bin/sh -c mkdir /data && chown redis:redis … 0B
<missing> 2 weeks ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 30.6MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_SHA=79… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_URL=ht… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV REDIS_VERSION=6.0.10 0B
<missing> 2 weeks ago /bin/sh -c set -eux; savedAptMark="$(apt-ma… 4.15MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.12 0B
<missing> 2 weeks ago /bin/sh -c groupadd -r -g 999 redis && usera… 329kB
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:422aca8901ae3d869… 69.2MB