Docker镜像容器操作

帮助命令

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

镜像命令

  1. docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
  2. docker search #搜索镜像
  3. docker pull #下载镜像
  4. docker pull 镜像名[:tag],如果不写tag,默认就是lates
  5. docker rmi #删除镜像
  6. docker rmi -f 镜像id #删除指定id的镜像
  7. docker rmi -f $(docker images -aq) #删除全部的镜像
  1. docker images #查看所有本地的主机上的镜像
  2. #解释
  3. #REPOSITORY # 镜像的仓库源
  4. #TAG # 镜像的标签(版本) ---lastest 表示最新版本
  5. #IMAGE ID # 镜像的id
  6. #CREATED # 镜像的创建时间
  7. #SIZE # 镜像的大小
  8. #可选项
  9. Options:
  10. -a, --all Show all images (default hides intermediate images) #列出所有镜像
  11. -q, --quiet Only show numeric IDs # 只显示镜像的id
  12. #docker images -a #列出所有镜像详细信息
  13. #docker images -aq #列出所有镜像的id

容器命令

  1. docker run 镜像id #新建容器并启动
  2. docker ps 列出所有运行的容器 docker container list
  3. docker rm 容器id #删除指定容器
  4. docker start 容器id #启动容器
  5. docker restart 容器id #重启容器
  6. docker stop 容器id #停止当前正在运行的容器
  7. docker kill 容器id #强制停止当前容器


新建容器并启动

  1. docker run [可选参数] image | docker container run [可选参数] image
  2. #参书说明
  3. --name="Name" #容器名字 tomcat01 tomcat02 用来区分容器
  4. -d #后台方式运行
  5. -it #使用交互方式运行,进入容器查看内容
  6. -p #指定容器的端口 -p 8080(宿主机):8080(容器)
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口(常用)
  9. -P(大写) 随机指定端口


列出所有运行的容器

  1. docker ps 命令 #列出当前正在运行的容器
  2. -a, --all #列出当前正在运行的容器 + 带出历史运行过的容器
  3. -n=?, --last int #列出最近创建的?个容器?为1则只列出最近创建的一个容器
  4. -q, --quiet #只列出容器的编号

退出容器

  1. exit #容器直接退出
  2. ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作

删除容器

  1. docker rm 容器id #删除指定容器,不能删除正运行的容器,若强制删除 rm -rf
  2. docker rm -f $(docker ps -aq) #删除所有的容器
  3. docker ps -a -q|xargs docker rm #删除所有的容器

启动和停止容器的操作

  1. docker start 容器id #启动容器
  2. docker restart 容器id #重启容器
  3. docker stop 容器id #停止当前正在运行的容器
  4. docker kill 容器id #强制停止当前容器


常用其他命令

  1. 后台启动命令
  2. docker run -d 镜像名
  3. 查看日志
  4. docker logs --help
  5. #模拟日志
  6. docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done"
  7. #显示日志
  8. -tf #显示日志信息(一直更新)
  9. --tail number #需要显示日志条数
  10. docker logs -t --tail n 容器id #查看n行日志
  11. docker logs -ft 容器id #跟着日志
  12. 查看容器中进程信息
  13. docker top 容器id
  14. 查看镜像的元数据
  15. docker inspect 容器id
  16. 进入当前正在运行的容器
  17. docker exec -it 容器id bashshell
  18. #方式二
  19. docker attach 容器id
  20. #docker exec #进入当前容器后开启一个新的终端,可以在里面操作(常用)
  21. #docker attach # 进入容器正在执行的终端
  22. 从容器内拷贝到主机上
  23. docker cp 容器id:容器内路径 主机目的路径
  24. docker run -it --rm 镜像名 一般是用来测试,用完就删除
  25. commit镜像
  26. docker commit 提交容器成为一个新的副本
  27. #命令和git原理类似
  28. docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[版本TAG]
  29. docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0

20200704125644446.png

容器数据卷

20200627155730155.png

三种挂载: 匿名挂载、具名挂载、指定路径挂载

-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

  1. docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
  2. 例:
  3. # 获取mysql镜像
  4. [root@iz2zeak7sgj6i7hrb2g862z home]# docker pull mysql:5.7
  5. # 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!
  6. # 参考官网hub
  7. docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  8. #启动我们得
  9. -d 后台运行
  10. -p 端口映射
  11. -v 卷挂载
  12. -e 环境配置
  13. -- name 容器名字
  14. docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql03 mysql:5.7
  15. # 启动成功之后,我们在本地使用sqlyog来测试一下
  16. # sqlyog-连接到服务器的3306--和容器内的3306映射
  17. # 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!

Dockerfile

Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!

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

  1. # 创建一个dockerfile文件,名字可以随便 建议Dockerfile
  2. # 文件中的内容: 指令(大写) + 参数
  3. $ vim dockerfile1
  4. FROM centos # 当前这个镜像是以centos为基础的
  5. VOLUME ["volume01","volume02"] # 挂载卷的卷目录列表(多个目录)
  6. CMD echo "-----end-----" # 输出一下用于测试
  7. CMD /bin/bash # 默认走bash控制台
  8. # 这里的每个命令,就是镜像的一层!
  9. # 构建出这个镜像
  10. -f dockerfile1 # f代表file,指这个当前文件的地址(这里是当前目录下的dockerfile1)
  11. -t caoshipeng/centos # t就代表target,指目标目录(注意caoshipeng镜像名前不能加斜杠‘/’)
  12. . # 表示生成在当前目录下
  1. $ docker build -f dockerfile1 -t caoshipeng/centos .
  2. Sending build context to Docker daemon 2.56kB
  3. Step 1/4 : FROM centos
  4. latest: Pulling from library/centos
  5. 8a29a15cefae: Already exists
  6. Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
  7. Status: Downloaded newer image for centos:latest
  8. ---> 470671670cac
  9. Step 2/4 : VOLUME ["volume01","volume02"] # 卷名列表
  10. ---> Running in c18eefc2c233
  11. Removing intermediate container c18eefc2c233
  12. ---> 623ae1d40fb8
  13. Step 3/4 : CMD echo "-----end-----" # 输出 脚本命令
  14. ---> Running in 70e403669f3c
  15. Removing intermediate container 70e403669f3c
  16. ---> 0eba1989c4e6
  17. Step 4/4 : CMD /bin/bash
  18. ---> Running in 4342feb3a05b
  19. Removing intermediate container 4342feb3a05b
  20. ---> f4a6b0d4d948
  21. Successfully built f4a6b0d4d948
  22. Successfully tagged caoshipeng/centos:latest
  23. # 查看自己构建的镜像
  24. $ docker images
  25. REPOSITORY TAG IMAGE ID CREATED SIZE
  26. caoshipeng/centos latest f4a6b0d4d948 About a minute ago 237MB

DockerFile的指令

  1. FROM # from:基础镜像,一切从这里开始构建
  2. MAINTAINER # maintainer:镜像是谁写的, 姓名+邮箱
  3. RUN # run:镜像构建的时候需要运行的命令
  4. ADD # add:步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
  5. WORKDIR # workdir:镜像的工作目录
  6. VOLUME # volume:挂载的目录
  7. EXPOSE # expose:保留端口配置
  8. CMD # cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
  9. ENTRYPOINT # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令
  10. ONBUILD # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令
  11. COPY # copy:类似ADD,将我们文件拷贝到镜像中
  12. ENV # env:构建的时候设置环境变量!

DockerCompose

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

  1. 下载地址: curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. 添加操作权限:chmod +x /usr/local/bin/docker-compose
  3. 查看:docker-compose --version
  4. 安装pip: sudo pip install docker-compose

DockerCompose指令

  1. version 指定本 yml 依从的 compose 哪个版本制定的
  2. build
  3. 指定为构建镜像上下文路径
  4. context:上下文路径。
  5. dockerfile:指定构建镜像的 Dockerfile 文件名。
  6. args:添加构建参数,这是只能在构建过程中访问的环境变量。
  7. labels:设置构建镜像的标签。
  8. target:多层构建,可以指定构建哪一层。
  9. command 覆盖容器启动的默认命令。
  10. container_name 指定自定义容器名称,而不是生成的默认名称。
  11. environment 添加环境变量。
  12. expose 暴露端口,但不映射到宿主机,只被连接的服务访问。
  13. image 指定容器运行的镜像。
  14. restart
  15. no:是默认的重启策略,在任何情况下都不会重启容器。
  16. always:容器总是重新启动。
  17. on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  18. unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

DockerCompose命令

  1. docker-compose up //启动yml文件定义的 container
  2. docker-compose up -d //后台运行
  3. docker-compose up --help //查看up帮助
  4. docker-compose -f docker-compose.yml up //-f 指定yml文件
  5. docker-compose stop //停止
  6. docker-compose start
  7. docker-compose ls //查看
  8. docker-compose down //停止删除
  9. docker-compose ps
  10. docker-compose images
  11. docker-compose exec {service_name} {bash}