Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集

Posted 是我,Zack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集相关的知识,希望对你有一定的参考价值。

一、Docker常用命令

From:Docker常用命令,非常完整,我用过的打个√记录,另外我补充些个人常用的。

1、Docker容器信息

##查看docker容器版本 
docker version 
##查看docker容器信息 
docker info 
##查看docker 容器帮助 
docker --help

2、镜像操作

提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。

2.1、镜像查看

##列出本地images
docker images
##含中间映像层
docker images -a

##列出本地images
docker images  
##含中间映像层
docker images -a
##显示镜像摘要信息(DIGEST列)
docker images --digests
##显示镜像完整信息
docker images --no-trunc

##显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc  显示完整的提交记录;-q  仅列出提交记录ID
docker history -H redis  √

2.2、镜像搜索

##搜索仓库mysql镜像
docker search mysql
## --filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 mysql
## --no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc mysql
## --automated :只列出 AUTOMATED=OK 的镜像
docker search  --automated mysql

2.3、镜像下载

##下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
##下载仓库所有Redis镜像
docker pull -a redis
##下载私人仓库镜像
docker pull bitnami/redis

2.4、镜像删除

##单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
##强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
##多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
##删除本地全部镜像
docker rmi -f $(docker images -q)

2.5、镜像构建

##(1)编写dockerfile
cd /docker/dockerfile
vim mycentos
##(2)构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1  .  √注意这里的小数点!

3、容器操作

提示:对于容器的操作可使用CONTAINER ID 或 NAMES。

3.1、容器启动

##新建并启动容器,参数:-i  以交互模式运行容器;-t  为容器重新分配一个伪输入终端;--name  为容器指定一个名称
docker run -i -t --name mycentos  
##后台启动容器,参数:-d  已守护方式启动容器
docker run -d mycentos

注意:此时使用"docker ps -a"会发现容器已经退出。这是docker的机制:要使Docker容器后台运行,就必须有一个前台进程。解决方案:将你要运行的程序以前台进程的形式运行。

##启动一个或多个已经被停止的容器
docker start redis
##重启容器
docker restart redis

3.2、容器进程

##top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
##列出redis容器中运行进程
docker top redis
##查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk 'print $1'`;do echo \\ &&docker top $i; done

3.3、容器日志

##查看redis容器日志,默认参数
docker logs rabbitmq
##查看redis容器日志,参数:-f  跟踪日志输出;-t   显示时间戳;--tail  仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
##查看容器redis从2019年05月21日后的最新10条日志。
docker logs --since="2019-05-21" --tail=10 redis

3.4、容器的进入与退出

##使用run方式在创建时进入
docker run -it centos /bin/bash
##关闭容器并退出
exit
##仅退出容器,不关闭
快捷键:Ctrl + P + Q
##直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false  确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos 
##在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i  即使没有附加也保持STDIN 打开;-t  分配一个伪终端
docker exec -i -t  centos /bin/bash
##以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
##以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos  touch cache.txt 

3.5、查看容器

##查看正在运行的容器
docker ps
##查看正在运行的容器的ID
docker ps -q
##查看正在运行+历史运行过的容器
docker ps -a
##显示运行容器总文件大小
docker ps -s


##显示最近创建容器
docker ps -l
##显示最近创建的3个容器
docker ps -n 3
##不截断输出
docker ps --no-trunc 

##获取镜像redis的元信息
docker inspect redis
##获取正在运行的容器redis的 IP
docker inspect --format='range .NetworkSettings.Networks.IPAddressend' redis

3.6、容器的停止与删除

##停止一个运行中的容器
docker stop redis
##杀掉一个运行中的容器
docker kill redis
##删除一个已停止的容器
docker rm redis
##删除一个运行中的容器
docker rm -f redis
##删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
## -l 移除容器间的网络连接,连接名为 db
docker rm -l db 
## -v 删除容器,并删除容器挂载的数据卷
docker rm -v redis

3.7、生成镜像

##基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停
docker commit -a="DeepInThought" -m="my redis" [redis容器ID]  myredis:v1.1

3.8、容器与主机间的数据拷贝

##将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
##将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
##将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]

4. 网络操作

4.1 查看网卡网络

## 先看看网卡
ip addr
## 进入容器看看网卡
docker exec -it tomcat01  ip addr
## 看看网络
docker network ls
## 看看网络细节
docker network inspect NETWORK ID

4.2 容器连接(网络)

## 直接ping
docker exec -it tomcat02 ping tomcat01
## --link命令连接网络
docker run -d -P  --name tomcat03 --link tomcat02 tomcat
## connect命令
docker network connect  mynet tomcat01

4.3 自定义网络

## --参数说明:-d -driver:参数指定 Docker 网络类型,有 bridge、overlay(用于 Swarm mode)
## --subnet 分配网段    --gateway 分配网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 直接启动的命令默认有一个 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat

5.Docker Compose

5.1 关闭、构建

docker-compose down         # 关闭容器
docker-compose up --build   # 重新构建

6.其他常用

这部分大多是linux的命令,熟悉的小伙伴可以不用看,我留给自己翻。

6.1 端口冲突

## 查看端口占用情况:
netstat -apn | grep 80
netstat -tln | grep 80  √  得空对比一下

## 查看占用端口的进程:
ps -ef | grep 3345
## 查看端口属于哪个程序?端口被哪个进程占用
lsof -i :80    √

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HVvl0H3f-1637658977021)(https://cdn.nlark.com/yuque/0/2021/png/2196885/1637655942023-0235e30e-164f-4060-9a3a-d6a6ec631110.png)]

## 强行杀掉进程
kill -9 3345

6.2 解压缩文件

二、Dockerfile

多看官网或者专业手册,很多你未知的默认规则在里面。

我通常看菜鸟教程:https://www.runoob.com/docker/docker-dockerfile.html

Dockerfile指令介绍的官方文档:https://docs.docker.com/engine/reference/builder/

1.指令说明

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

一个形象的解释各个指令作用的图:

2.案例参考

# 定制的镜像都是基于 FROM 的镜像,这里的 centos 就是定制需要的基础镜像。
FROM centos

MAINTAINER zecan<861328011@qq.com>

# 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
COPY readme.txt /usr/local/readme.txt

# 类似COPY,在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
ADD iamsso.tar.gz
ADD fuseiamdb.sql.tar /usr/local/??mysql

# 用于执行后面跟着的命令行命令,通常用下面这种shell 格式,等同于在终端操作shell命令
RUN yum -y install vim 
RUN yum -y install net-tools

# 适用于普通用户可以运行的程序
ENV MYPATH /user/local
WORKDIE $MYPATH

# 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。   
# ARG 设置的环境变量仅对 Dockerfile 内有效,比较少用
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

EXPOSE 8080

# 用于运行程序, 相对于RUN,CMD 在docker run 时运行
# 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效
# 但你要是看到写了好几行的,是为 ENTRYPOINT 指令指定的程序提供默认参数(具体看手册)
CMD /bin/bash 

三、Docker Compose

学会找官方的,抓住本质!

官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/

菜鸟教程:https://www.runoob.com/docker/docker-compose.html

1.yml 配置指令参考

这里仅罗列常用的,其他没遇到的上我前面两个网站找!

指令说明示例
version指定本 yml 依从的 compose 哪个版本制定的,目前最新3.8version: “3.8”
build指定为构建镜像上下文路径:
depends_on设置依赖关系。depends_on: - db - redis
deploy指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。
expose/pose暴露端口,但不映射到宿主机,只被连接的服务访问。 仅可以指定内部端口为参数:expose: - “3000” - “8000”
environment添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
image指定容器运行的镜像。image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-
volumes将主机的数据卷或着文件挂载到容器里。
restartalways:容器总是重新启动。其他含义见手册
networks配置容器连接的网络,引用顶级 networks 下的条目 。例见下

2.案例参考 docker-compose.yaml

version: "3.8" # 版本对比查找官网:https://docs.docker.com/compose/compose-file/
services:
  iamsso:
    container_name: iamsso-cont
    build: .
    image: iamsso-centos7-jdk8:1.0
    depends_on:
      - mysql
    networks: 
      - my-bridge 
    ports:
      - "8089:8089"
  
  mysql:
    container_name: mysql-cont
    image: mysql:5.7.24
    restart: always 
    networks: 
      - my-bridge   
    ports:
      - "3306:3306"                  
    volumes:
      - /root/mysql/conf:/etc/mysql/conf.d 
      - /root/mysql/logs:/var/log/mysql 
      - /root/mysql/data:/var/lib/mysql 
    
    environment:
      MYSQL_ROOT_PASSWORD: root
      
  nginx:
    container_name: nginx-cont
    image: nginx
    restart: always
    networks: 
      - my-bridge 
    ports:
      - 80:80
      - 443:443
      - 5050:5050
      - 4040:4040
    volumes:
      - /home/Docker/mynginx/nginx/log:/var/log/nginx 
      - /home/Docker/mynginx/nginx/conf.d:/etc/nginx/conf.d 
      - /home/Docker/mynginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
      - /home/Docker/mynginx/nginx/html:/usr/share/nginx/html

networks:
   my-bridge:
     driver: bridge  
      

四、配置常用数据卷

1.Mysql

docker run -p 3306:3306 --name mysql 
-v /root/mysql/conf:/etc/mysql/conf.d 
-v /root/mysql/logs:/var/log/mysql 
-v /root/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.24

-d: 后台运行容器,也可以使用镜像id
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数  MYSQL_ROOT_PASSWORD 指定登录密码

2.Nginx

docker run --name nginx03 -d -p 8089:8089 \\
-v /home/Docker/mynginx/nginx/log:/var/log/nginx \\
-v /home/Docker/mynginx/nginx/conf.d:/etc/nginx/conf.d \\
-v /home/Docker/mynginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \\
-v /home/Docker/mynginx/nginx/html:/usr/share/nginx/html nginx

日志目录 : /var/log/nginx 
配置目录 : /etc/nginx/conf.d (这个目前遇到的比较少用)
主配置文件:/etc/nginx/nginx.conf 
项目目录 : /usr/share/nginx/html nginx

/usr/local/bin 适用于普通用户可以运行的程序。

  • 该/usr/local层次结构供系统管理员在本地安装软件时使用。

  • 更新系统软件时,必须确保它不会被覆盖。

  • 它可用于可在一组主机之间共享但在中找不到的程序和数据/usr。

  • /usr/local除非要安装本地安装的软件以替换或升级,否则必须将本地安装的软件放置在/ usr之下/usr。

持续更新,欢迎收藏~

Docker学习笔记合集(持续更新)

linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)

Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)

以上是关于Docker知识点翻阅手册--Docker常用命令DockererfileCompose网络等整理合集的主要内容,如果未能解决你的问题,请参考以下文章

Docker 常用命令速查手册

docker、k8s 命令查询手册

Docker的一些常用命令

linux12 - docker容器09 -->docker常用命令

Docker—— 镜像的常用命令

Docker 小手册:汇总(最后更新 2019.9.3)