列出镜像列表
docker images
获取新的镜像
这里可以通过==:==来决定获取那一版本,不指定则是最新的
docker pull ubuntu:13.10
docker pull ubuntu
查找镜像
docker search ubuntu
docker tag {镜像Id} {镜像名称}:{标签名}
可以看到在执行完成之后,同一个镜像有了两个标签一个是latest 一个是tag
删除镜像
在删除镜像之前需要删除容器才可以删除
docker rmi ubuntu:18.04
用自己jar制作镜像
首先需要在一个文件夹下存放Dockerfile文件和自己的jar吧
dockerfile写入如下内容
FROM openjdk:8-jdk-alpine
MAINTAINER zxf
ADD get-gitlab-0.0.1-SNAPSHOT.jar wk.jar
EXPOSE 4000
ENTRYPOINT ["java","-jar","wk.jar"]
这里端口是我程序内配置文件指定的端口,ADD 后面是我们的jar名,wk.jar是我起的别名
docker build -t test-test .
在当前文件加执行上面的操作,就会生成一个叫test-test的镜像
启动容器
这里-it 和-itd 后者是后台运行的意思,前者输完会直接进入容器中
docker run -itd --name=ubuntu-test ubuntu /bin/bash
这里因为没有指定端口,所以后面的ports底下为空,这里可以将好几个容器的端口开放,然后对应一个内部的服务端口
启动已停止运行的容器
docker start {容器Id}
停止容器
docker stop {容器Id}
进入容器
这里有两中方式,我这里只推荐一种,下面这两条命令是一样的,不过有时上面这个命令进不去容器,就可以使用下面的命令
docker exec -it {容器Id} /bin/bash
docker exec -it {容器Id} /bin/sh
打印容器日志
两者都可以打印日志,第二个命令执行,就会一直停留在日志打印界面,对于快速定位问题很有帮助
docker logs gitlab
docker logs gitlab -f
删除容器
docker rm -f {容器id}
将容器打成镜像
docker commit -m "说明文字(可不写)" -a "作者(可不写)" [CONTAINER ID] [自己起的容器名]
因为容器启动后产生的数据,要是第二次再启动就会损失掉数据,为了让docker容器在运行时的数据得带持久化,就需要挂载,就是将docker容器的某一个目录和宿主机上的某一个目录映射起来,可以说就是两者有操作同一个数据,每次容器重启的时候,容器会自动将挂载目录下的数据同步到docker内部
最好的选择就是在容器启动的时候挂载,容器一旦跑起来后,再要去挂载会很麻烦
docker run -itd --name=[容器名] -v /root/data:/root/data [镜像名]
这里使用==-v== 关键字来指定,前面是宿主机的路径,后面是容器内部路径,我为了方便查找,两个路径写的一样,这里可以写成不一样的
另外需要注意的是,MySQL的挂载需要指定目录,因为MySQL的数据保存在/var/lib/mysql 下,这个是默认的,为了避免麻烦最好直接挂载该目录
下面是一条启动MySQL容器并且挂载并且设置自启动的命令
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=novastar -v /root/workspace/data/mysql:/var/lib/mysql --restart=always mysql
为了防止宿主机断电,docker服务能够跑起来,最好的处理方式设置docker容器开机自启,容器也要设置开机自启
查询所有是否开机自启
systemctl list-unit-files | grep enable
systemctl enable docker.service
容器的自启可以在创建的时候,或者对于已存在的容器设置自启
docker run --restart=always 容器id 或 容器名称
docker update --restart=always 容器id 或 容器名称
取消容器自启
docker update --restart=no 容器id 或 容器名称
执行下面操作,就可将宿主机的时间和容器的时间同步,所以发现时间有问题,首先需要检查宿主机时间是否正确,接着可是使用下面的命令,将docker容器的时间就和宿主机同步了
docker cp /usr/share/zoneinfo/Asia/Shanghai mysql:/etc/localtime
通过下面两条命令就可以在宿主机执行容器里的jar包,如下,但是需要配置容器对宿主机的免密 ==-Duser.timezone=GMT+08 ==指定jar包的运行的时间,有这句话,就不会有时间不对应了
ssh -p 8801 [email protected] 'nohup java -jar -Duser.timezone=GMT+08 /root/workspace/data/project/XXXX.jar >platform.log 2>&1 &'
ssh -p 8801 [email protected] 'tail -f ~/platform.log -n300'