Docker的基本命令介绍

前言:

仓库 --镜像名--- 容器的关系

镜像存放在仓库里。

仓库——取出镜像——创建容器(可多个)——将项目/应用置于容器之中

一、docker的一些基本命令

如果是普通用户,记得再命令前面加上sudo哦!

docker version         ----查看docker的版本信息

docker info               ---查看docker的系统信息,包括镜像数量等

docker 命令 --help   ----万能命令

二、镜像命令

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

docker images  ---- 查看所有镜像

docker images -a  --- 列出所有镜像

docker images -q    ----只显示镜像id

docker search mysql   ---- 搜索mysql镜像

docker search mysql --filter=STARS=3000   --- 按照点赞数搜索mysql镜像[stars大小写都可       以]

docker pull mysql    ---- 下载mysql镜像【默认为最新版本的镜像】

docker pull mysql:5.7   ---下载指定版本的mysql镜像

docker rmi -f c20987f18b13   --- 根据镜像ID删除镜像

docker rmi -f mysql                 ---根据镜像名删除指定镜像

docker rmi -f $(docker images -aq)    ---批量删除所有镜像

docker images -a -q|xargs grep docker rmi -f   --- 批量删除所有镜像的另一用法

三、容器命令

有镜像才能创建容器,这里我们可以选择下载ubuntu、centos等镜像去测试学习

docker pull ubuntu              -----下载ubuntu系统镜像

docker run [可选参数] 镜像名 启动方式 --- 启动容器

docker run -it ubuntu /bin/bash              ---用bash的方式启动并进入ubuntu容器之中

sudo docker run --name="ubuntu1" -it ubuntu /bin/bash  

   ---新建名为ubuntu1的容器并启动进入容器

其他参数:

-d    后台方式运行

-it 使用交互方式运行,进入容器内查看内容

-p 指定容器端口

        -p 8080:8080

         -p ip 主机端口:容器端口 [常用的]

        -p 容器端口

-P 随机指定端口

docker ps              ---列出当前正在运行的所有容器

docker ps -a            ---列出当前运行中的容器+历史运行过的容器

docker ps -n=1      -----显示最近创建的容器

docker ps -q         ----只显示容器ID

docker ps -aq      ----显示所有容器ID

exit                      ----停止运行容器并退出

ctrl+P+Q            --退出容器但不停止运行

容器

docker rm 容器ID     --- 根据容器id删除容器,正在运行的删除不了

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 run -d ubuntu

查看日志:

docker logs -f -t --tail 5 容器id 

        -tf #显示日志[t是时间戳,]

        --tail num #要显示的日志的条数

查看容器中的进程信息

docker top 容器id

查看容器/镜像的元数据

docker inspect 容器id或镜像id

五、进入当前正在运行的容器

通常容器是使用后台方式运行的,需要进入容器,修改一些配置!

方式一:

#exec -- 进入容器后,开启一个新的终端,可以再里面操作(常用)

docker exec -it 容器id /bin/bash    ---it交互方式进入容器

方式二:

# attach 进入容器正在执行的终端,不会启动新的进程

docker attach 容器id  

六、容器内拷贝文件到主机上

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

docker cp dab125d3b201:/home/huanzi.php /home

七、提交镜像

想保存当前容器状态,可通过commit 提交,将获得一个镜像 

 docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[tag]

        docker commit -a="shh_ye" -m="add webapps app" 容器id tmcat02:1.0

案例:

docker run -d -P --name tomcat01 tomcat

docker exec -it tomcat01 /bin/bash

apt-get update

apt-get install -y iproute2

apt-get install -y iputils-ping

ctrl+P+Q

docker ps  

docker commit -a="shh_ye" -m="add iproute2 iputils-ping" 2e2859d531f3 tomcat:1.0

docker images

docker rm -f  2e2859d531f3

docker run -d -P --name tomcat01 tomcat:1.0

八、容器数据卷

方式一:指定路径挂载  --双向绑定

        docker run -it -v 主机目录:容器内目录 

        docker inspect 容器id   ---寻找mounts查看是否挂载成功

方式二:匿名挂载

        docker run -d -P --name nginx01 -v /etc/nginx nginx 

方式三:具名挂载

        docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

   docker volume inspect juming-nginx        ---查看具名挂载目录的具体地址

  docker volume ls    ---查看所有的卷的情况

所有的docker容器内的卷,没有指定目录下的情况下都是在 /var/lib/docker/volumes/XXXX   

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

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

数据卷容器:

#启动自己生成的镜像

docker run -it --name docker01 huan/ubuntu:1.0

docker run -it --name docker02 --volumes-from docker01 huan/ubuntu:1.0

docker ps

docker attach 容器01id

cd volume01

touch test.txt

docker attach 容器02id

cd volume01

ls -----可以看到容器01新建的文件在容器2内可以看到!!! 

双向拷贝的概念,多用于多个mysql实现 数据共享!

九、DockerFile

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

1、编写一个dockerfile文件

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

3、docker run 【运行镜像】

4、docker push 发布镜像【dockerHub、阿里云】

1、每个指令都必须大写!!

2、执行从上到下顺序执行

3、#表示注释

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

FROM #基础镜像, ---一切从这里开始 [这个镜像的妈妈是谁?]

MAINTAINER #镜像是谁的,姓名+邮箱 [告诉别人,谁负责维护它]

RUN #镜像构建的时候需要运行的命令[你想让它干啥]

ADD #步骤:tomcat镜像,这个tomcat压缩包,添加内容

WORKDIR #镜像的工作目录

VOLUME #设置容器卷,挂载到那个位置

EXPOSE #指定暴露的端口,端口配置

CMD #指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代

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

ONBUILD #当构建一个被继承Dockerfile 这个时候就会运行 ONBUILD的指令。触发指令 COPY #复制,类似ADD命令,将我们文件拷贝到镜像中

ENV #构建的时候设置环境变量! 

创建一个自己的ubuntu
1、编写dockerfile文件
  cd /home/dockerfile
  vim mydockerfile
    FROM ubuntu    ---基础镜像是ubuntu
    MAINTAINER shh_ye<shh_ye@163.com>   ----作者名
    
    ENV MYPATH /usr/local   ---配置根目录是/usr/local
    WORKDIR $MYPATH       ----工作目录 
    
    RUN apt-get update
    RUN apt-get -y install vim   ---镜像构建时要执行的命令
    RUN apt-get -y install net-tools
    
    EXPOSE 80                ---暴露端口号
    
    CMD echo $MYPATH         ---容器启动时执行 的命令
    CMD echo "----end----"
    CMD /bin/bash
2、生成镜像
docker build -f dockerfile文件路径 -t 镜像名:版本号
docker build -f mydockerfile -t myubuntu:0.1 .   #-f指定文件路径  -t指定镜像名 ,后面还有个.
    Successfully built c9031a71d605
    Successfully tagged myubuntu:0.1
3、测试运行
docker images ----- 查看镜像
docker run -it myubuntu:0.1   ----启动镜像
进入容器,可看到进入了自己的工作目录  /usr/local
ifconfig --- 查看网络信息
vim test.php 也可以

十、Docker网络详解

ip addr
    lo --- 本机回环地址
    docker0 --- docker地址
    enp1s0  ---阿里云内网地址

 docker0  ---docker启动就会有的网络,docker自带的

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术就是 evth-pair技术!

docker run -d -P --name tomcat03 --link tomcat02 tomcat

docker exec -it tomcat03 ping tomcat02 

--linke可以实现网络单向连通!! 即tomcat03 可以pingtomcat02,但反过来就不行!

--linke就是我们在hosts配置中增加了一个172.17.0.2 tomcat02

docker network ls   ---查看所有网络

docker network inspect 网络名   ---查看某一个网络的具体信息

自定义网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

docker network inspect mynet

docker run -d -P --name tomcat-net-02 --net mynet tomcat

docker network inspect mynet

# 无论是容器名字还是ip地址,都是可通的!

docker exec -it tomcat-net-01 ping 192.168.0.3

docker exec -it tomcat-net-02 ping 192.168.0.2

docker exec -it tomcat-net-01 ping tomcat-net-02

#实现一个容器与一个网络的连通!

docker network connect mynet tomcat01

docker network inspect mynet

本质:

连通之后就是将tomcat01放到了mynet网络下!

一个容器两个ip地址,阿里云服务,一个公网ip,一个私网ip

假设要跨网络操作别人,就要使用docker network connect 连通!!

网络模式: 

  1. bridge桥接模式: 0.1是桥,0.2和0.3可以联系(默认,自己用的也是)
  2. none:不配置网络
  3. host:和宿主机共享网络
  4. container:容器网络互联通!(用的少,局限性很大)

十一、总结

docker version   --- 查看doc版本ker版本

docker info     ----查看docker系统信息

docker images

docker pull ubuntu

docker search ubuntu

docker images -a -q

docker rmi  ubuntu

docker rmi -f ubuntu

docker rmi -f $(docker images -aq)

docker run --name ubuntu01 -it ubuntu /bin/bash

docker run -d -p 8080:8080  --name ubuntu01 ubuntu 

docker ps 

docker ps -a

docker exec -it ubuntu01 /bin/bash

docker attach ubuntu01

docker top 容器id

docker inspect 容器id

docker cp 容器id:容器内地址  宿主机地址

docker logs -f -t --tail 5 容器id

exit

ctrl+P+Q

docker rm 容器id

docker rm -f 容器id

docker rm -f $(docker ps -aq)

docker ps -a -q | xargs docker rm -f 

docker start 容器id

docker restart 容器id

docker stop 容器id

docker kill  容器id

docker run -e修改配置文件信息

docker commit -a="shh" -m="add file" 容器id tomcat:1.0

docker run -it -v 主机目录:容器内目录

docker run -d -P --name nginx01 -v /etc/nginx nginx

docker run -d -P  --name nginx02 -v jumping-nginx:/etc/nginx nginx

docker volume inspect jumping-nginx

docker volume ls

docker run -it --name docker02 --volumes-from docker01 ubuntu:1.0

docker build -f dockerfile -t myubuntu:0.1 .

docker run -it myubuntu:0.1

docker network ls

docker network inspect 网络名

docker run -d -P --name tomcat03 --link tomcat02 tomcat

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

docker run -d -P --name tomcat-net-01 --net mynet tomcat

后记:docker学习中最为重要的就是某个命令加--help!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值