常用命令:
docker build -t [容器名] . 根据Dockerfile 配置开始打包镜像 注意:后面有个点,表示当前目录下
service docker restart 重启docker
docker images 查看当前的镜像文件
docker ps -a 查看当前运行的镜像程序
docker pull 拉去镜像文件 从镜像仓库
docker build -t [容器名] . 注意:后面有个点,表示当前目录下
docker run 运行docker容器
docker run -it --net=host --name erizboot -p 8181:8181 erizboot 创建容器 并运行它
docker start cid 运行一个已经存在的容器.根据容器id, 查看容器id 可以通过 docker ps -a
docker ps -a 查看容器的信息及状态(运行或停止)
docker rmi docker-project-Id 移除镜像, 如果删除不了(例如多个id导致不能删除) 就加 -f 暴力删除(相同的id都会被删除),例如 : docker rmi -f c53b236d7e3f
docker rm docker-project-Id 移除容器
docker kill cId 强制杀死正在运行的容器
docker stop cid 停止正在运行的容器
docker exec -it cid /bin/bash 进入容器,根据容器id
#docker-project:镜像名称, caomingjiecode/czdocker: docker hub 仓库地址(自己申请的) , 0.1: tag名称,一般设置为版本号
docker tag docker-project caomingjiecode/czdocker:0.1 修改 镜像的tag,
docker login 登陆docker 仓库, 我的仓库是 docker hub
docker push caomingjiecode/czdocker:0.1 将docker镜像上传到docker hub
docker logs --tail='10' cid 查看指定容器日志 最后10行,也可以指定更多行, 滚动查看加 -f
docker run --link=cid:别名 用于容器之间的端口直接访问通过别名(避免了ip和映射端口)
David@MacBook-Pro-3 ~$ docker run --name=mysql_client1 --link=mysql_server:db -i -t hzc/mysql_client mysql -h db -uroot -p1234
docker run -v srcFile:descFile 文件映射,将本地文件映射到容器中指定的文件. srcFile 本地文件/夹, descFile 容器文件/夹
docker run -it -v ~/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.8.1
docker cp cname:/xx/xx ./xx 当容器配置文件被我们改错时,容器启动不起来时可以用这种办法将配置文件copy出来,修改完后再写回容器.
ubuntu安装docker 命令:
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker -v
常用案例:
#启动mysql 5.7版本
docker run --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#启动springboot项目,共享本机ip和端口,
docker run -it --net=host --name erizboot -p 8181:8181 erizboot
-i参数是keep STDIN open even if not attached,意思就是会把交互界面保留着。但是要看容器的PID1,或者说看容器的CMD是什么,有些CMD程序并不会理会任何输入,也就是说它就没有等着你输入命令,这时候你输入什么都是无效的。并且,因为linux对pid1的特殊处理,它也不会理会信号,所以你只能按ctrl+p + ctrl+q,把程序放到后台。(但通常都要run -it一起使用才有效)
-t
allocate a pseudo-TTY.作用是分配一个虚拟的终端,我的理解就是,有了-t参数,这个docker就会被分配一个终端,在docker中启动bash就会有提示符。不过,-it总是一起出现的。
--name
为容器取一个名字
实际工作中的开发环境: idea ,gradel , 似有docker仓库, 打包后推送到似有仓库
Dockerfile: 在src/main/docker 目录下
#私有基础镜像,ip:port 为私服地址和端口
FROM ip:port/urcs/java:8
VOLUME ["/tmp"]
#./ 代表当前build的目录
ADD ./* /home/project/
#指定时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["/home/project/run.sh"]
build.gradle 中的内容
//只需要修改 autoPush/imageTag
buildscript {
project.ext {
//打包镜像名称,ip:port 为私服地址和端口
imagesTag = "ip:port/" + "项目名称"
springIOVersion = '1.0.0.RELEASE'
springBootVersion = '1.5.9.RELEASE'
}
repositories {
jcenter()
mavenLocal()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath 'se.transmode.gradle:gradle-docker:1.2'
classpath "io.spring.gradle:dependency-management-plugin:${springIOVersion}"
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}
apply plugin: 'docker'
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
jar {
manifestContentCharset 'utf-8'
metadataCharset 'utf-8'
manifest {
attributes "Main-Class": "org.heilum.service.udr.UdrApplication"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
//可运行jar
task buildRunJar(type:Copy, dependsOn: build) {
from configurations.runtimeClasspath
from 'src/main/resources'
into 'build/libs' // 目标位置
}
//构建docker镜像
task buildDocker(type: Docker, dependsOn: buildRunJar) {
push = "false" //true 为发布到docker私服. false:不发布到私服.但可以在本地 docker images 中看到.
tag = imagesTag
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from 'build/libs'
into stageDir
}
}
}
dependencies {
compile project(':api:common')
compile project(':service:starter')
compile 'io.swagger:swagger-annotations:1.5.20'
implementation "commons-codec:commons-codec:1.14"
//mybatis
compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
compile 'org.mybatis:mybatis:3.4.1'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'mysql:mysql-connector-java:6.0.6'
compile 'org.json:json:20160810'
compile 'com.github.joschi.jackson:jackson-datatype-threetenbp:2.6.4'
compile 'com.alibaba:fastjson:1.2.47'
compile 'junit:junit:4.11'
compile(group: 'org.springframework.boot', name: 'spring-boot-starter-undertow', version: springboot_version)
}
docker 配置 私服的地址:ip:port 为私服的地址和端口
vi /etc/docker/daemon.json
{ "insecure-registries":["ip:port"] }
启动脚本:
#!/bin/bash
ulimit -c unlimited #cpu core 无限制
ulimit -n 32768 #打开文件的限制
#当前docker镜像文件目录
basePath=$(cd "$(dirname "$0")"; pwd)
echo $basePath
#查看镜像中的所有文件
ls ./home/project
#获取要执行的jar包
projectjar=$(ls /home/project | grep 'udr.*jar$')
echo "jar的包名为: "$projectjar
chmod 777 "/home/project/$projectjar"
#开始执行命令
exec $JAVA_HOME/bin/java -jar "/home/project/$projectjar"
执行:
gradle buildDocker -x test --stacktrace