一、基本启动命令
docker run -itd -p 800:80 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf --name my_nginx nginx
这条命令拆分:
docker run :docker运行一个镜像
-itd :it进入 d后台运行
-p: 本机(宿主机)端口:容器端口
–name my_nginx nginx :my_nginx是我起的容器名字 nginx表示用nginx镜像启动
如果没有镜像(镜像下载):
docker pull nginx
/root/nginx/nginx.conf:/etc/nginx/nginx.conf 表示把宿主机的配置文件映射到容器的配置文件(很重要)。容器里面,比如nginx启动是使用容器里面的配置文件的,我们想同步修改配置文件(避免每次进入到容器修改),则可以在运行镜像时就映射配置。
这时候问题来了,如果我怎么知道映射到容器里面的拿个文件呢?
docker exec -it my_nginx sh
这条指令进入到名字为my_nginx的容器里面,需要在里面找到对应的配置文件(百度查对应镜像的配置文件所在位置),主要还是去看一下 确认。
二、构建镜像(高级用法)
linux下创建一个目录,创建build.sh 、Dockerfile 文件
Dockerfile文件:
# 以什么镜像支持来运行的,如果是nginx,则nginx:latest
FROM java:latest
# 镜像下运行的指令 校准时间 ,可照搬
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
#本地(宿主机)文件 复制到容器,起的名字”app-0.0.1-SNAPSHOT.jar“
COPY app-0.0.1-SNAPSHOT.jar /app-0.0.1-SNAPSHOT.jar
#本地文件复制到容器,用于上面指令校准时间的
COPY localtime /etc/localtime
# 告知外界你容器监听的端口,用于-p 来绑定的,但是实际不影响容器内的服务真正监
#听的端口,如果写了假的,则-p 绑定失败 ,就访问不到内部服务
EXPOSE 8081
#docker run “镜像名” 后面如果没有指令,则运行这条
CMD ["/usr/bin/java","-jar","/app-0.0.1-SNAPSHOT.jar"]
build.sh文件
#!/bin/bash
#我运行容器时起的名字是java8
docker stop java8
#移除 java8容器
docker rm java8
docker rmi -f ax:v1
# 构建 后面的.也要,表示匹配当前目录下的Dockfile文件
docker build -t ax:v1 .
docker run -itd --name java8 -p 8088:8081 ax:v1
localtime 文件,百度拿把,二进制文件来的,需要ftp传进去
一些管理命令:
docker ps #查看正在运行的容器
docker ps -a #查看所有运行过且还未被移除的容器
docker restart “运行时起的容器名” #重启未被移除的容器,会有先前命令的记忆
docker rm “容器名” #移除容器
docker history ax:v1 #查看ax镜像对外说明监听的端口(有可能是假的,如果是假的需要进去镜像找配置文件查看实际监听的端口)
docker查看日志,–tail="想查看最近的行数“ java8 容器名
docker logs --tail="10" java8