docker笔记_tintinc的博客-爱代码爱编程
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 .
启动容器,查看挂载卷目录
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": ""
}
],
……
- 容器间数据共享
- 指令说明
FROM #基础镜像,一切从这里开始构建
MAINTAINER #署名,Tintin<tintin@123.com>
RUN #镜像构建时候需要运行的命令
ADD #镜像
WORKDIR #镜像工作目录
VOLUME #挂载目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动需要运行的命令,只有最后一个会生效(可被替代)
ENTRYPOINT #指定这个容器启动时需要运行的命令,可追加命令
ONBUILD #当构建一个被继承DockerFile 这时候会运行ONBUILD指令,触发指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建时候设置环境变量
- 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