Docker学习笔记

开始

安装

查看是否安装成功

docker version

hello world

docker run hello-world

查看镜像

docker images

配置阿里云

进入阿里云网站,找到容器镜像服务,按要求配置即可。

回顾hello-world流程

image-20210630164950537

Docker的常用命令

帮助命令

docker version	# 显示docker的版本信息
docker info		# 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help	# 帮助命令

帮助文档的地址:Reference documentation | Docker Documentation

镜像命令

docker images 查看本地主机上的镜像

wyihe@LAPTOP-K7UPH2AE:~$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    083d7564d904   2 weeks ago    28MB
hello-world              latest    d1165f221234   3 months ago   13.3kB

# 解释
REPOSITORY	镜像的仓库源
TAG			镜像的标签
IMAGE ID	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

# 可选项
  -a, --all             # 列出所有镜像
  -q, --quiet           # 只显示镜像的id

docker search 搜索镜像

web:Docker Hub

wyihe@LAPTOP-K7UPH2AE:~$ docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11068     [OK]
mariadb                           MariaDB Server is a high performing open sou…   4193      [OK]
...

# 可选项,通过搜索来过滤
--filter=STARS=3000 # 搜索出来的镜像STAR大于3000的

docker pull 下载镜像

# docker pull 镜像名
wyihe@LAPTOP-K7UPH2AE:~$ docker pull mysql
Using default tag: latest			# latest 默认最后一个版本
latest: Pulling from library/mysql	
b4d181a07f80: Pull complete			# 分层下载 image的核心 若存在,不会重复下载,节省内存
a462b60610f5: Pull complete
...
Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest 		# 真实地址

# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
docker pull mysql:5.7

docker rmi 删除镜像

docker rmi -f 容器id		# 删除指定容器,只会删除不重复的卷
docker rmi -f 容器id 容器id 容器id
docker rmi -f $(docker images -aq) # 删除全部容器

容器命令

我们有了镜像才可以创建容器,下载一个centos来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name" 	容器名字,用来区分容器
-d				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p				指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口 (常用)
	-p 容器端口
	容器端口
-P				随机指定端口

# 测试,启动并进入容器
wyihe@LAPTOP-K7UPH2AE:~$ docker run -it centos /bin/bash
[root@7e35bed66e90 /]# ls		# 操作容器内的centos
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7e35bed66e90 /]# exit		# 退出容器
exit
wyihe@LAPTOP-K7UPH2AE:~$

列出所有运行的容器

docker ps		# 正在运行的容器
-a				# 当前运行+历史运行的容器
-n?				# 显示最近创建的容器
-q				# 只显示容器编号

退出容器

exit		# 直接容器停止并退出
Ctrl+P+Q	# 容器不停止退出

删除容器

docker rm 容器id				# 删除指定容器,-f强制删除
docker rm $(docker ps -aq)   # 删除所有的容器

启动和停止容器的操作

docker start 容器id	# 启动容器
docker restart 容器id	# 重启容器
docker stop 容器id	# 停止容器
docker kill 容器id	# 强制停止当前容器

常用其他命令

后台启动容器

docker run -d 镜像名

# 注意:若docker发现正在运行的容器没有前台进程,容器会停止运行

查看日志

docker logs

-tf				# 显示日志
--tail NUMBER	# 日志条数

查看容器中进程信息

docker top 容器id

查看镜像的元数据

docker inspect 容器id

进入当前正在运行的容器

docker exec -it 容器id bashshell	# 进入容器开启一个新终端
docker attach	#进入容器正在执行的终端 

从容器内拷贝文件到主机上

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

docker镜像

commit镜像

docker commit 提交容器成为一个新的镜像

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="wyihe" -m="add webapps app" 44b2cb522fb6 w_tomcat:1.0

容器数据卷

使用数据卷

方式一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录
docker run -it -v /home/ceshi:/home centos /bin/bash	# 双向绑定,一方更改另一方也会更改

具名挂载和匿名挂载

-v 容器内路径	# 匿名挂载
-v 卷名:容器内路径	# 具名挂载
-v /宿主机路径:容器内路径	# 指定路径挂载

匿名挂载

# 匿名挂载
-v 容器路径
 docker run -d -P --name nginx01 -v /etc/nginx nginx
 
# 查看所有的 volume 情况
docker volume ls
root@LAPTOP-K7UPH2AE:/home/wyihe# docker volume ls
DRIVER    VOLUME NAME
local     01d526bb3a4cd91d890161ef583e80e1e4c81e3db864be45861253095a791d1f

具名挂载

# 具名挂载
-v 主机目录没有/,将自动挂载到docker某指定目录
docker run -d -P --name nginx2 -v juming-nginx:/etc/nginx nginx

# 查看所有的 volume 情况
docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx

# 查看一下这个卷,挂载地点为 "/var/lib/docker/volumes/juming-nginx/_data"
docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2021-07-05T03:34:53Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

扩展:权限

# 扩展
ro	# 容器内只读,只能通过外部修改
rw	# 容器内可读写

docker run -d -P --name nginx2 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx2 -v juming-nginx:/etc/nginx:rw nginx

初识dockerfile

方法二

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

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

创建镜像

# 创建一个dockerfile文件
FROM centos

VOLUME ["/volume01","/volume02"]

CMD echo "---end---"

CMD /bin/bash

# 生成镜像
docker build -f dockerfile01 -t wyihe/centos .

使用镜像

 docker run -it 703f234db31c /bin/bash
image-20210705124028869

生成镜像的时候自动挂载的,数据卷目录

数据卷容器

# 生成有自动挂载目录的容器1(上)
docker run -it --name docker01 wyihe/centos bash
# 生成有自动挂载目录的容器2,链接容器1
docker run -it --name docker02 --volumes-from docker01 wyihe/centos

--volumes-from # son extend father
自动挂载的目录将同步

注意:共享文件是一个互相拷贝的概念。

DockerFile

DockerFile 介绍

用来构建 docker 镜像的文件。命令参数脚本

构建步骤:

  1. 编写一个 dockerfile 文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像 (dockerhub、阿里云镜像仓库)

DockerFile 构建过程

基础知识

  1. 每个保留关键字(指令)都必须是大写字幕
  2. 指令从上到下顺序执行
  3. # 表示注释
  4. 每个指令都会创建提交一个新的镜像层

步骤

DockerFile: 构建文件,定义了一切的步骤、源代码

DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行产品

Docker容器:容器就是镜像运行起来提供服务

DockerFile 指令

FROM		# 基础镜像,一切从这里开始构建
MAINTAINER	# 镜像是谁写的,姓名+邮箱
RUN			# 镜像构建的时候需要运行的命令
ADD			# 添加内容,比如tomcat压缩包
WORKDIR		# 镜像的工作目录
VOLUME		# 挂载的目录
EXPOSE		# 暴露端口配置
CMD			# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替换
ENTRYPOINT	# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		# 当构建一个被继承 DockerFile ,这个时候会运行 ONBUILD 指令,触发指令
COPY		# 类似 ADD,将我们的文件拷贝到镜像中
ENV			# 构建的时候设置环境变量

发布镜像

发布到DockerHub

官网

https://hub.docker.com/

登录

docker login -u [user]

发布 update-centos

# docker tag 规范命名
docker tag update-centos wyihe/update-centos:1.0
# 提交镜像
docker push wyihe/update-centos:1.0 # 作者/镜像名:版本

发布到阿里云

进入阿里云容器镜像服务

参考官方文档

实战

部署Nginx

下载镜像 docker pull nginx
运行测试 docker run -d --name nginx01 -p 3344:80 nginx
进入容器 docker exec -it nginx01 /bin/bash
可访问 localhost:3344
退出容器 docker stop nginx01

部署Tomcat

# 官方的方法
docker run -it --rm tomcat:9.0 # --rm 容器用完即删(容器)

# 下载
docker pull tomcat

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
访问 localhost:3355

# 进入容器
docker exec -it tomcat01 /bin/bash

# 发现问题,是阉割过的

# 文件藏在webapps.dist里,把它复制到webapps里
cp -r webapps.dist/* webapps/
进入网页再看看,可以了

mysql同步数据

# 获取镜像
docker search mysql
docker pull mysql:5.7
# 启动mysql
docker run -d -p 3310:3306 -v /home/mysql/conf:/ect/mysql/conf.d -v /home/mysql/date:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

-d	后台运行
-p	端口映射
-v	数据卷挂载
-e 环境配置
--name 容器名字

创建test库,对应的映射目录中出现test目录,映射成功

image-20210705110754592

image-20210705110847243

创建Centos

注:该操作基于update后的官方centos镜像

编写配置文件

FROM mycentos:1.0
MAINTAINER wyihe<wyiheyes@163.com>

ENV MYPATH /user/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 -t mycentos:1.0 .

运行

docker run -it 623b44eae278

查看镜像的运行历史步骤

 docker history wyihecentos:1.0
posted @ 2021-07-10 13:59  yangruomao  阅读(61)  评论(0编辑  收藏  举报