Docker的使用

发布于 2020-12-26  37 次阅读


镜像命令

查看镜像

docker images
-a  #列出所有镜像
-q  #只显示镜像id

搜索镜像

docker search 镜像名
--filter #过滤
#例子
docker search mysql --filter=STARS=3000

下载镜像

docker pull 镜像名[:tag]
# 如果不写tag,默认就是latest

# 以下命令等价
docker pull mysql
docker pull docker.io/library/mysql:latest

#指定版本下载
docker pull mysql:5.7

删除镜像

docker rmi 镜像id
-f #强制删除
#删除多个镜像
docker rmi 镜像id 镜像id 镜像id
#删除全部镜像
docker rmi $(docker images -aq)

查看镜像历史

docker history 镜像id

容器命令

有镜像才可以创建容器

新建容器并启动

docker run [可选参数] image
--name=容器名字 #命名容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p 主机端口:容器端口 #指定容器的端口
-P    #大写P,随机指定端口
-v #挂载数据卷
--add-host 主机名:ip地址 #写入容器hosts

#进入容器/bin/bash目录交互
docker run -it centos /bin/bash
#后台运行shell脚本
docker run -d centos /bin/bash -c "while true;do echo kuangshen;sleep 1; done"

注意:

  • 后台运行时,必须有前台进程
  • 否则会自动停止
  • 例如:CentOS、Nginx
  • 是否需要在容器里添加主机映射
  • 是否需要挂载来传入本地文件

查看容器

docker ps #列出正在运行的容器
-a #列出所有容器
-q #只显示容器的编号

退出容器

exit #容器停止并退出
Ctrl+P+Q #容器不停止退出

删除容器

docker rm 容器id
-f #强制删除
#删除所有容器
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 exec -it 容器id /bin/bash
docker attach 容器id
# docker exec        # 进入容器后开启一个新的终端
# docker attach        # 进入容器正在执行的终端,不会启动新的进程

其他命令

查看日志

docker logs 容器id
-t #显示时间戳
-f #跟踪日志输出
--tail number #仅列出最新的n条

查看容器中进程信息

docker top 容器id
#PID:当前进程id
#PPID:父进程id

查看镜像的元数据

docker inspect 容器名称|id

拷贝容器文件到主机

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

DockerFile

DockerFile语法

FROM            #基础镜像
MAINTAINER        #作者,姓名<邮箱>
RUN                #镜像构建时执行命令
COPY            #类似ADD,但不会解压
ADD                #添加内容到镜像,会自动解压
ENV                #构建的时候设置环境变量
WORKDIR            #镜像的工作目录
CMD                #容器启动时运行的命令,只有最后一个生效,可被替代
ENTRYPOINT        #类似CMD,但命令不会被替代而是追加
VOLUME            #需要挂载的目录
EXPOSE            #暴露端口配置
ONBUILD            #继承该镜像就会运行的指令

构建镜像:docker build -f dockerfile文件路径 -t 镜像名:[tag] .

注意:

  • 不要忘记最后加 "."
  • Dockefile在当前路径下 就不用加-f
  • 镜像构建时会把目录下的东西都放进去
  • 所以最好单独建一个目录

实战测试

#编写Dockerfile文件
FROM centos
MAINTAINER author<xxxxxx@qq.com>

#相当于定义一个变量
ENV MYPATH /usr/local
WORKDIR $MYPATH

# 添加vim 和 net-tools功能
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
#启动后进入哪个命令行
CMD /bin/bash

实战:Tomcat镜像

文件准备

  • CentOS镜像文件
  • tomcat压缩包
  • jdk压缩包

编写dockerfile文件

FROM centos
MAINTAINER author<xxx@qq.com>

COPY readme.txt /usr/local/readme.txt

# ADD命令会自动解压
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.o
ut

构建镜像

# 将文件命名为Dockerfile
docker build -t diytomcat .

启动镜像

docker run -d -p 9090:8080 --name tomcat01 -v /home/build/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs diytomcat

访问测试