Image.jpg

镜像的操作

拉取镜像到本地

docker pull 镜像名称[:tag]
https://hub.docker.com/ 搜索镜像

查看全部镜像

docker images

删除本地镜像

docker rmi 镜像ID(IMAGE ID)

修改镜像名称

docker tag 镜像ID 新镜像名称:版本

更新镜像

docker commit -m '镜像描述信息' -a '作者信息' 容器ID 镜像名

保存镜像

docker save centos > 镜像名.tar

载入镜像

docker load < 镜像名.tar

容器的操作

1.运行容器

简单操作

docker run 镜像ID|镜像名称[:tag]
docker run -itd --privileged -v /sys/fs/cgroup:/sys/fs/cgroup --name skyhu4 centos:7 /usr/sbin/init
-v /sys/fs/cgroup:/sys/fs/cgroup 添加映射目录参数 解决systemctl服务不能启动
常用参数docker run -d -p 宿主机端口:容器端口 --name 镜像ID|镜像名称[:tag]
-d 代表后台运行容器
-p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 指定容器名称
--privileged 重要参数,使容器内部能使用主机所有的linux内核功能

2.查看正在运行的容器

docker ps [-qa]
-a:查看全部的容器,包括没有运行
-q:只查看容器的ID

3.查看容器的日志

docker logs -f 容器ID
-f:可以滚动查看日志的最后几行

4.进入到容器内部

docker exec-it 容器ID bash

5.删除容器(删除容器前,需要停止容器)

停止一个容器docker stop 容器ID
停止全部容器docker stop $(docker ps -qa)
删除一个容器docker rm 镜像ID
删除全部容器docker rm $(docker ps -qa)

6.启动容器docker satrt 容器ID

7、查看容器元数据 docker inspect 容器ID

8.检查容器文件的修改 docker diff 容器ID

9. 复制文件到容器内部 docker cp 文件名称 容器ID:容器内部路径

10.查看容器详细信息 docker inspect 容器ID

11.docker --link容器互联nginx连接mysql docker run --name db mysql -d

                       docker run -itd --name web -p 80:80 --link db:db nginx  #--link <容器名>:<别名>

12.docker attach 容器

13. 显示容器正在运行的进程信息 docker top 容器

退出容器

exit ###容器停止退出,缓慢的方式

ctrl+P+Q ###容器不停止退出

Docker应用

运行MySQL容器

docker run -d -p 3306:3306 --name MYSQL_ROOT_PASSWORD=root daocloud.io/libart/mysql:5.7.4

准备运行的项目

project.war

复制到tomcat里

docker cp 文件名称 容器ID:容器内部路径

举个栗子

docker cp project.war TOMCAT:/usr/local/tomcat/webapp

数据卷

# 1.创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后,默认会存放在一个目录下 /var/lib/docker/volume/数据卷名称/_data
# 2.查看数据卷详细信息
docker volume inspect 数据卷名称
# 3.查看全部数据卷
docker volume ls
# 4.删除数据卷
docker volume rm 数据卷名称
# 5.应用数据卷
# 当你映射数据卷时,如果数据卷不存在,Docker会帮你创建。会将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 数据卷名称:容器内部的路径 镜像ID
# 直接指定路径作为数据卷的存放位置,这个链接不是空的。
docker run -v 路径:容器内部的路径 镜像ID
# 举个栗子
docker run -d -p 8080:8080 --name tomcat -v 路径:/usr/local/tomcat/webapp 镜像ID

Docker自定义镜像

Dockerfile的语法非常简单,常用的只有11个
v2-5c1759ef2a3b31c2f56c28dea193ef7b_1440w.jpg

FROM:
  FROM {base镜像}
  必须放在DOckerfile的第一行,表示从哪个baseimage开始构建
MAINTAINER:
  可选的,用来标识image作者的地方
RUN:
  每一个RUN指令都会是在一个新的container里面运行,并提交为一个image作为下一个RUN的base
  一个Dockerfile中可以包含多个RUN,按定义顺序执行
  RUN支持两种运行方式:
    RUN <cmd> 这个会当作/bin/sh -c “cmd” 运行
       RUN [“executable”,“arg1”,。。],Docker把他当作json的顺序来解析,因此必须使用双引号,而且executable需要是完整路径
    而如果需要将两条命令或者多条命令联合起来执行需要加上&&。如:cd /usr/local/src && wget xxxxxxx
CMD:
  CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)
  当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令
  一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用
CMD定义的三种方式:
  CMD <cmd> 这个会当作/bin/sh -c "cmd"来执行               CMD echo "hello world"
  CMD ["executable","arg1",....]    推荐用这种方法         CMD ["/bin/bash","-c","echo 'hello world'"]
  CMD ["arg1","arg2"],这个时候CMD作为ENTRYPOINT的参数
Entrypoint:
  entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部
  每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效
  当定义了entrypoint以后,CMD只能够作为参数进行传递
entrypoint定义方式:
  entrypoint ["executable","arg1","arg2"],这种定义方式下,CMD可以通过json的方式来定义entrypoint的参数,可以通过在运行container的时候通过指定command的方式传递参数                             推荐用这个方法       
  entrypoint <cmd>,当作/bin/bash -c "cmd"运行命令  ectrypoint echo   不会传递参数
  CMD ["hello world"]
  ENTRYPOINT ["echo"]
docker run centos                      输出hello worlhd   
docker run centos hello skyhu   输出 hello skyhu,作为entrypoint的传参
总结下一般该怎么使用:一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数。
cmd 在docker里面的命令 会被外面的docker run 参数替换掉
entrypoint 会把docker run 的参数当传参

EXPOSE 声明端口
  格式为 EXPOSE <端口1> [<端口2>...]。
  EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

ADD & COPY:
  当在源代码构建的方式下,可以通过ADD和COPY的方式,把host上的文件或者目录复制到image中
  ADD和COPY的源必须在context路径下
  当src为网络URL的情况下,ADD指令可以把它下载到dest的指定位置,这个在任何build的方式下都可以work
  ADD相对COPY还有一个多的功能,能够进行自动解压压缩包
    ADD能填加网络文件,并能解压缩tar.gz文件 COPY 不能解压,只能复制
ENV:
  ENV key value
  用来设置环境变量,后续的RUN可以使用它所创建的环境变量
  当创建基于该镜像的container的时候,会自动拥有设置的环境变量
     docker run -e Hello=1234  -e 与 --env 相同
WORKDIR:
  用来指定当前工作目录(或者称为当前目录)
  当使用相对目录的情况下,采用上一个WORKDIR指定的目录作为基准
USER:
  指定UID或者username,来决定运行RUN指令的用户
ONBUILD:
  ONBUILD作为一个trigger的标记,可以用来trigger任何Dockerfile中的指令
  可以定义多个ONBUILD指令
  当下一个镜像B使用镜像A作为base的时候,在FROM A指令前,会先按照顺序执行在构建A时候定义的ONBUILD指令
  ONBUILD <DOCKERFILE 指令> <content>
VOLUME:
  用来创建一个在image之外的mount point,用来在多个container之间实现数据共享
  运行使用json array的方式定义多个volume
  VOLUME ["/var/data1","/var/data2"]
  或者plain text的情况下定义多个VOLUME指令

.dockerignore 文件 在构建dockfile时 排除dockerignore里面写的文件或目录

移动Docker 存储数据的位置。

标签: docker

添加新评论