Docker笔记

本文详细介绍了Docker的基本命令,包括启动、停止、管理容器,以及镜像操作。通过实例展示了如何运行Nginx、构建Dockerfile以及数据卷的使用。还提及了容器间的数据共享、镜像发布到Docker Hub和阿里云,并探讨了Dockerfile中CMD和ENTRYPOINT的区别。此外,还提到了Spring Boot应用的Docker化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker

Docker基本命令

systemctl start docker
# 所有镜像
docker images
# 下载镜像
docker pull 镜像名
# 删除镜像
docker rmi 镜像id
docker rmi -f IMAGE ID1 IMAGE ID2 IMAGE ID3 //删除多个
docker rmi -f $(docker images -aq) //删除全部
#运行
docker run [参数] image
docker run -it --name nginx01 -p 80:80 nginx //交互运行
docker run -d --name nginx01 -p 80:80 nginx  //后台运行

#进入正在运行的容器
docker exec -it 容器ID /bin/bash
docker attach 容器id 
# docker exec       # 进入容器后开启一个新的终端,可以在里面操作
# docker attach     # 进入容器正在执行的终端,不会启动新的进程

--name=“Name”   容器名字    tomcat01    tomcat02    用来区分容器
-d      后台方式运行
-it     使用交互方式运行,进入容器查看内容
-p      指定容器的端口     -p 8080:8080
    -p  ip:主机端口:容器端口
    -p  主机端口:容器端口(常用)
    -p  容器端口
    容器端口
-p      随机指定端口
 
# 退出
exit
Ctrl + P + Q

# 删除
docker rm -f 容器id
docker rm -f $(docker ps -aq)

#开启停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

#查看日志
docker logs -tf --tail number 容器id
-tf                 # 显示日志
--tail number       # 显示日志条数

#后台运行时没有进程将会被自动停止
docker run -d centos /bin/bash -c "while true; do echo wurr; sleep 1; done"

# 文件复制
docker cp 容器ID:内部路径 目的路径

#查看容器信息
docker inspect 容器ID

Nginxn安装运行

docker pull nginx

docker run -d --name nginx01 -p 80:80 nginx

docker exec -it bdda08daeadc /bin/bash

exit

docker cp bdda08daeadc:/home/testCopy /home/Tintin/

可视化

portainer

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

curl localhost:8088

Commit容器

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

docker commit -a="Tintin" -m="Include webapp" eb663605151f tomcat-webapp:1.0

容器数据卷

挂载卷volume

  • 指定路径挂载
docker run -d -v /local:/docker dockerID

docker run -d --name mysql01 -p 3306:3306 -v /home/mysql/config:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  • 匿名&具名挂载
# 匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx   //-P随机指定端口
#具名挂载
docker run -d --name nginx02 -P -v local-nginx:/etc/nginx nginx

# 挂载情况
[root@Tintin ~]# docker volume ls
DRIVER    VOLUME NAME
local     235fe3cba6117e9cf860e5377a066b352416c4d061fbe66cbdf50c0ba0187b18
local     local-nginx

# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v  容器内路径                   # 匿名挂载
-v  卷名:容器内路径               # 具名挂载
-v /主机路径:容器内路径            # 指定路径挂载
[root@Tintin ~]# docker volume inspect local-nginx
[
    {
        "CreatedAt": "2022-11-22T14:48:57+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/local-nginx/_data",
        "Name": "local-nginx",
        "Options": null,
        "Scope": "local"
    }
]

DockerFile

#-----初始化dockerfile-----
    vim dockerFile

    # 创建一个dockerfile文件, 名字可以随机
    # 文件的内容 指定(大写) 参数

    FROM centos

    VOLUME ["volume01", "volume02"]

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

    # 这里的每一个命令都是镜像的一层!

#-----执行dockerfile-----
docker build -f /home/docker-test-volume/dockerfile -t tintin-centos:1.0 .

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjxYe0KB-1669210580723)(%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3.assets/image-20221122153225923.png)]

启动容器,查看挂载卷目录

docker inspect 容器id

[root@Tintin docker-test-volume]# docker run -d --name centos01 3af44bbae9ea /bin/bash
c9dca554130a8273d6ee94a882ff72f1dc46b77694e33ecb34bcc2527763c742
[root@Tintin docker-test-volume]# docker inspect c9d
[
    {
        ……
        "Mounts": [
            {
                "Type": "volume",
                "Name": "6179bafd9bd7c90dd32173e04fe9a65d249b88f0d28c63d6afb1f1363296f346",
                //挂载到这个目录下
                "Source": "/var/lib/docker/volumes/6179bafd9bd7c90dd3211363296f346/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "29c2f7c3cb1190afad34e2e03009edd320e2194d64548932a01e82c512a3f9e8",
               	//挂载到这个目录下
               	"Source": "/var/lib/docker/volumes/29c2f7c3cb1132a01e82c512a3f9e8/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        ……
  • 容器间数据共享

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lz1ODScu-1669210580724)(%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3.assets/20200813120430844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8uro85V-1669210580725)(%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmppYW5oYWk=,size_16,color_FFFFFF,t_70-20221122161159574.png)]

  • 指令说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zx3Uqvdt-1669210580725)(%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmppYW5oYWk=,size_16,color_FFFFFF,t_70-20221122174450619.png)]

FROM          #基础镜像,一切从这里开始构建
MAINTAINER		#署名,Tintin<tintin@123.com>
RUN						#镜像构建时候需要运行的命令
ADD						#镜像
WORKDIR				#镜像工作目录
VOLUME				#挂载目录
EXPOSE				#暴露端口配置
CMD						#指定这个容器启动需要运行的命令,只有最后一个会生效(可被替代)
ENTRYPOINT		#指定这个容器启动时需要运行的命令,可追加命令
ONBUILD				#当构建一个被继承DockerFile 这时候会运行ONBUILD指令,触发指令
COPY					#类似ADD,将文件拷贝到镜像中
ENV						#构建时候设置环境变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E314BUst-1669210580725)(%E4%B8%AA%E4%BA%BA%E6%96%87%E6%A1%A3.assets/image-20221122174408196.png)]

  • CMD和ENTRYPOINT区别(启动时拼接命令)
#CMD
[root@Tintin docker-test-volume]# docker run tintincmd:1.0 -l
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.

#ENTRYPOINT
[root@Tintin docker-test-volume]# docker run tintinentrypoint:1.0 -l
total 64
drwxr-xr-x   1 root root  4096 Nov 22 10:21 .
drwxr-xr-x   1 root root  4096 Nov 22 10:21 ..

Tomcat

  • 创建Dockerfile
FROM centos:7
MAINTAINER tintin<tintinsmail@foxmail.com>

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

ADD apache-tomcat-9.0.68.tar /usr/local/
ADD jdk-8u141-linux-x64.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.68/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.68/logs/catalina.out
  • 构建镜像
docker bulid -f Dockerfile -t mytomcat:1.0 .
  • 创建容器
docker run -d -p 8080:8080 --name tomcat01 -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.68/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.68/logs mytomcat:1.0

镜像发布

  • dockerhub
# tag
docker tag firstimage YOUR_DOCKERHUB_NAME/firstimage
# push
docker push YOUR_DOCKERHUB_NAME/firstimage
# 例子
docker tag mytomcat:1.0 tintinsdocker/mytomcat:1.0

docker push tintinsdocker/mytomcat:1.0
  • 阿里云

参考官方文档

docker 网络

springBoot打包成Docker镜像

FROM java:8
 
COPY *.jar /app.jar
 
CMD ["--server.port=8080"]
 
EXPOSE 8080
 
ENTRYPOINT ["java", "-jar", "/app.jar"]
# 出入Dockfile和jar包后执行
[root@Tintin springboot]# docker build -t springbootproject:1.0 .
Successfully built 75f1993d521b
Successfully tagged springbootproject:1.0

# 生成容器
[root@Tintin springboot]# docker run -d --name myproject -p 8080:8080 springbootproject:1.0
29b60de7de9c168cdf363d6bd6fbf8caadca61b7d09e838c13408e58f3dd67d2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值