Docker学习笔记之入门基础知识点

一、Docker常用命令

1.基础命令
docker version # 查看docker版本信息
docker info # 查看docker的系统信息,包括容器信息和镜像信息
docker 命令 --help # 查看命令 
2.镜像命令
docker images # 查看本机所有镜像
docker search # 搜索镜像
docker pull 镜像名[:tag] # 下载镜像,不带tag默认最新版本
docker rmi 镜像id # 删除镜像,加参数-f强制删除
3.容器命令
docker run [options] image # 运行容器
--name="name" # 指定容器名称
-d # 后台方式运行
-it # 使用交互的方式运行,进入容器查看内容
-p # 指定容器端口 主机端口:容器端口
-P # 随机指定端口
exit # 退出容器命令(后台运行方式退出不会终止容器)
Ctrl+P+Q # 不停止容器退出
docker ps # 列出正在运行的容器
-a # 列出所有运行过的容器记录
-n=? # 列出最近运行过的n的容器
-q # 只显示容器编号
docker rm 容器id # 删除容器不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
docker log 容器id # 查看容器日志
可选参数
Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
docker logs -tf 容器id
docker logs --tail num 容器id #num为要显示的日志条数
docker top 容器id # 查看容器中的进程信息
docker inspect 容器id # 查看容器的元数据
docker exec -it 容器id /bin/bash # 进入容器
docker attach 容器id # 进入容器
# docker exec 进入容器后开启一个新的终端,可以在里面操作
# docker attach 进入容器正在执行的终端,不会启动新的进程
docker commit -m=“提交的描述信息”  -a="作者" 容器id 目标镜像名:[TAG] # 使用docker commit 命令提交容器成为一个新的版本
4.拷贝操作
docker cp 容器id:容器内路径  目的主机路径 #拷贝容器的文件到主机中
docker cp 目的主机路径 容器id:容器内路径 #拷贝宿主机的文件到容器中

二、数据卷

1.简单使用
docker run -it -v 主机目录:容器目录 # 指定路径挂载方式,后面还有具名挂载和匿名挂载
2.查用命令
docker volume create my-vol # 创建数据卷
docker volume ls # 查看所有的数据卷
docker volume inspect my-vol # 查看指定数据卷的信息
docker volume rm my-vol # 删除数据卷
docker rm -v # 删除容器之时删除相关的卷
docker volume prune # 清理无主的数据卷
3.使用–mount挂载数据卷
$ docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp \
--mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp 
python app.py
# Docker 挂载主机目录的默认权限是读写 ,用户也可以通过添加readonly 参数指定为只读 。
$ docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp:ro \
--mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py
加了readonly之后,就挂载为只读了。如果你在容器内/src/webapp目录新建文件,会显示如下错误
/src/webapp # touch new.txt
touch: new.txt: Read-only file system
4.具名挂载和匿名挂载
匿名挂载

匿名挂载就是在指定数据卷的时候,不指定容器路径对应的主机路径,这样对应映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹

# eg:
docker run -d -P --name nginx -v /etc/nginx nginx

查看所有的数据卷volume的情况, VOLUME NAME这里的值是真实存在的目录

[root@lxzforever ~]# docker volume ls
DRIVER    VOLUME NAME
local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local     668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local     e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
具名挂载

具名挂载,就是指定文件夹名称,区别于指定路径挂载,这里的指定文件夹名称是在Docker指定的默认数据卷路径下的。通过docker volume ls命令可以查看当前数据卷的目录情况

[root@lxzforever ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
4ceaff19e5275dcd3014a8e7a8af618f7f7ce0da18d605c7c41a8653e78bf912
[root@lxzforever ~]# docker volume ls
DRIVER    VOLUME NAME
local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local     668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local     e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
local     juming-nginx

查看指定的数据卷信息的命令:docker volume inspect 数据卷名称

5.容器数据卷

容器数据卷是指建立数据卷,来同步多个容器间的数据,实现容器间的数据同步。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it --name cnetos01 ethan/centos:1.0
[root@731d53b8c3d5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
# 接着设置数据卷挂载关系 启动容器,通过参数--volumes-from,设置容器和容器之间建立数据卷挂载关系
[root@iZwz99sm8v95sckz8bd2c4Z /]# docker run -it --name centos02 --volumes-from cnetos01 ethan/centos:1.0
[root@7f90d4147511 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root  360 Dec 30 14:58 dev
drwxr-xr-x   1 root root 4096 Dec 30 14:58 etc
drwxr-xr-x   2 root root 4096 Nov  3 15:22 home
lrwxrwxrwx   1 root root    7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root 4096 Dec  4 17:37 lost+found
drwxr-xr-x   2 root root 4096 Nov  3 15:22 media
drwxr-xr-x   2 root root 4096 Nov  3 15:22 mnt
drwxr-xr-x   2 root root 4096 Nov  3 15:22 opt
dr-xr-xr-x 108 root root    0 Dec 30 14:58 proc
dr-xr-x---   2 root root 4096 Dec  4 17:37 root
drwxr-xr-x  11 root root 4096 Dec  4 17:37 run
lrwxrwxrwx   1 root root    8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3 15:22 srv
dr-xr-xr-x  13 root root    0 Dec 29 15:41 sys
drwxrwxrwt   7 root root 4096 Dec  4 17:37 tmp
drwxr-xr-x  12 root root 4096 Dec  4 17:37 usr
drwxr-xr-x  20 root root 4096 Dec  4 17:37 var
drwxr-xr-x   2 root root 4096 Dec 30 14:54 volume01
drwxr-xr-x   2 root root 4096 Dec 30 14:54 volume02

三、Dockerfile

Docker镜像发布的步骤:

1、编写一个dockerfile文件

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

3、docker run 镜像

4、docker push 镜像(发布镜像到DockerHub、阿里云镜像仓库

Dockerfile指令说明

FROM 指定基础镜像
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 保留端口配置
CMD 指定这个容器启动的时候要运行的命令(只有最后一个会生效)
EMTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV 构建的时候设置环境变量

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

关于DockerFile文件的脚本注意点有

**1、**每个保留关键字(指令)都必须是大写字母

**2、**文件中的指令从上到下顺序执行,第一个指令必须是FROM

3、# 号表示注释

**4、**每一个指令都会创建提交一个新的镜像层,并提交!

构建镜像命令: docker build -f dockerfile文件路径 -t 镜像名[:版本号] .(最后的.不可忽略)

-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点

另外,我们通过docker history 容器id命令来查看镜像的构建步骤

RUN命令与CMD命令ENTRYPOINT命令的区别

RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令

CMD和ENTRYPOINT的区别

ENTRYPOINT :指定容器启动的时候要运行的命令,命令可以追加

CMD :指定容器启动的时候要运行的命令,只有最后一个会生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值