docker基本命令

一.镜像常用命令

命令功能例子
docker images查看本地所有的镜像
docker search mysql到仓库搜索镜像
docker pull ubuntu:21.10拉取镜像
docker rmi -f 镜像id删除镜像

二.容器常用命令

命令功能例子
docker run使用镜像新建容器并启动docker run -it ubuntu:21.10
docker start 容器id启动容器
docker stop 容器id停止容器
docker attach 容器id进入运行的容器
docker exec -it 容器id /bin/bash进入运行的容器,并打开一个新的终端
exit退出容器,并且容器停止
docker ps查看正在运行的容器
docker ps -a查看所有的容器
docker rm 容器id删除容器
docker inspect 容器id查看容器的基本信息
docker cp 容器id:容器内路径 主机路径从容器复制文件到主机
docker state查看docker的状态,各个容器所使用的资源

docker run常用参数:
–name ubuntu01 容器的名字
-d 后台运行命令
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口, 例如-p 主机端口:容器端口 (通过主题的端口可以访问容器内的端口)
示例

三.容器数据卷

3.1 数据卷的含义:
  • 1.把主机目录和容器内目录共享,主机目录新增数据会同步到容器内目录,反之同样也同步
  • 2.实现容器间数据共享
  • 3.把容器内的数据挂载到其他主机上,避免删除容器删除数据
3.2 命令

方式一:手动方式

docker run -it -v 主机目录:容器内目录 ubuntu:21.10
-v:表示目录挂载

示例:

docker run -it -v /home/ceshi:/home/contain_data ubuntu:21.10
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 mysql01 mysql:5.7

补充:
-v 容器内路径 匿名挂载 (在docker的运行环境的volumes中可以看到具体共享的数据,卷的名字随机字符串)
-v 卷名:容器内路径 具名挂载 (在docker的运行环境的volumes中可以看到具体共享的数据,但是卷是有名字的)
-v /宿主机路径:容器内路径 指定路径挂载 (在宿主机上的路径上看到具体共享的数据)

方式二:在dockerfile挂载

FROM centos
VOLUME ["volume01", "volume02"]
CMD /bin/bash

上面的dockfile的意思,基于centos镜像,新建两个目录(这两个是匿名目录),然后构建自己的镜像

构建的命令
docker build -f /home/dockerfile1 -t mycentos01

然后通过mycentos01可以生成自己的容器,会看到里面有两个目录volume01 和volume02
可以通过docker inspect 查看挂载的源目录和目的目录
在这里插入图片描述

四.dockfile文件

功能:构建自己镜像的另一个方法,由多个命令脚本构成
指令:

命令功能
FROM指定基础镜像
MAINTAINER指定制作的作者 (姓名+邮箱)
RUN镜像构建时需要运行的命令
ADD添加自己的内容,比如tomcat压缩包
WORKDIR镜像的工作目录,就是新生成的容器进来后默认的路径
VOLUME设置容器数据卷
EXPOSE指定对外端口
CMD指定容器启动的时候运行的命令, 只有最后一个命令会生效,可被替代
ENTRYOINT指定容器启动的时候运行的命令,可以追加命令
COPY和ADD相似,将文件拷贝到镜像中
ENV构建时设置环境变量

例子1:编写一个自己的centos
新建一个dockerfile文件

FROM centos:7
MAINTAINER yxk<10234@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

使用 docker build -f dockerfile -t mycentos:0.1 .构建进行
解释说明:

  • 在centos中安装 vim 和net-tools
  • 工作目录设置为 /usr/local
  • 暴露端口 80

例子2:编写自己的tomcat镜像

首先准备tomcat和jdk的安装包

#tomcat运行的系统
FROM centos
COPY read.md /usr/local/read.md

#把安装包拷贝到centos对应的目录中,当执行构建的时候,压缩包会自动解压
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/

#安装centos没有的命令
RUN yum -y install vim

#设置工作目录,进入容器默认的目录
ENV MYPATH /usr/local
WORKDIR $MYPATH

#在centos中配置JAVA和tomcat环境变量
ENV JAVA_HOME /usr/local/jdk8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

#暴露tomcat端口
EXPOSE 8080

#执行tomcat启动命令
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh

使用docker build -f dockerfile -t mytomcat .构建镜像
使用该镜像获取的容器,将会自动运行tomcat。

五.docker网络

docker容器之间使用的是桥接技术,各个容器之间相同通信
在这里插入图片描述
存在的问题:
当容器重启后,对应的ip就变化了,比如我们有一个mysql的容器,另外一个容器通过ip连接mysql服务器,如果mysql容器重启后,此时就会发现连接失败

解决思路:使用自定义网络

命令功能
docker network ls查看docker所有的网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet创建网络
docker network inspect mynet查看网络信息
docker network connect mynet tomcat-other-01联通不同号段间的容器

例子1:创建同一个号段内的容器

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

此时查看mynet网络信息,就发现上面的两个容器都在这个网络上
在这里插入图片描述
此时两个容器之间,既可以用ip ping通,也可以通过名称ping通

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

实例2:不同号段的容器网络联通

使用自定义的网络建立的容器,网络是在同一个子网内,那么对于两个网段的下的容器怎么联通?思路是一个容器可以有多个ip

docker network connect mynet tomcat-other-01

查看网络信息 docker network inspect mynet可以发现 tomcat-other-01 在该网络中有新的ip

六.docker compose

背景
比如一个集成化的应用包含tomcat、redis、mysql、nginx,如果单独部署,就至少要docker run四次,而且不能很好的解决他们的依赖关系,compose就可以完美的解决这些问题
compose :通过yml配置文件,定义运行多个容器。

compose不是docker自带的,它是Apache开源的项目,所以你要自己安装它

命令功能
docker-compose up运行
docker-compose up -d后台运行
docker-compose ps查看运行状态
docker-compose stop停止运行
docker-compose restart重启
docker-compose restart service-name重启单个服务
docker-compose exec service-name sh进入容器命令行
docker-compose logs service-name查看容器运行log

docker-compose.yml编写格式

version: ""   #版本
services:   #定义各个服务
	服务1:     #生成服务的镜像 可以是仓库中的,也可以是自己本地定义的dockerfile,当然可以直接在这里手写dockerfile中的命令或者docker命令
		生成该容器对应的参数
		depends_on:    #服务依赖其他服务
			- 服务n
			- 服务n-1
	服务n:
		生成该容器对应的参数
#其他的配置

备注:多看官网的例子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值