- Docker相关
安装docker
yum -y install docker(centos下)
运行docker服务
service docker start或者/bin/systemctl start docker.service
- Idea新建web项目编写测试controller,打包成jar包,测试可运行访问并输出内容;
- 编写Dockerfile
FROM java:8
EXPOSE 86
VOLUME /tmp
ADD docker_demo-0.0.1-SNAPSHOT.jar docker_demo.jar
RUN bash -c 'touch /docker_demo.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/docker_demo.jar"]
将jar包和Dockerfile放在一个目录下,运行docker build -t docker_demo .(注意这个点,表示dockfile在当前目录下,docker_demo是镜像名称)构建对象
参数说明
VOLUME 宿主本地创建数据卷映射到容器的tmp目录
ENTRYPOINT 容器运行后运行的命令
运行镜像:docker run -d -p 86:86 docker_demo
-d 守护进程,后台运行(不加这个参数只要ctrl+c 命令行中断 容器就停止运行)
-p 映射本地86到容器内86
docker_demo 镜像名称
-v 本地:容器 挂载本地目录到容器目录 文件互通
查看运行结果:docker logs 4c6df2e967e7113a5baac238eafa721415277d319cee8071d3bc072363c43034(容器id) -f参数可以追加日志
curl进行测试接口 项目是否运行成功
其它命令:
查看所有本地所有镜像: docker images
查看运行中的容器 : docker ps
查看所有运行过的容器 : docker ps -a
启动运行过的容器:docker start 容器id
停止运行中的容器:docker stop 容器id
删除镜像docker rmi 镜像id
删除容器docker rm 容器id
查看容器或者镜像的具体信息:docker inspect id
进入运行中的容器内部:docker exec -it e6648828737e /bin/bash
说明:一个镜像相当于一个静态的脚本,run起来就是动态的容器实例,run多次就是多个不同的实例,实例之间隔离,实例可以根据需求随意增删,容器内的操作不会影响镜像;
Volume说明
docker run .... -v /data 创建一个Volume,其实是在host machine上创建一个directory
docker volume create --name ** 创建一个Volume,其实是在host machine上创建一个directory
docker volume ls 列出所有volume
docker volume inspect [volume name] 即可获取这个volume在主机的位置
Volume可以在容器之间以及容器和主机之间共享和重用
· Volume在某一挂载的位置被修改,所以使用该volume的地方都会同时更新
· Volume的大小不会被加到容器本身上
· Volume会一直存在,直到没有任何容器使用它,才能使用命令docker volume rm [volumes名字]删除
主机和容器之间的数据共享
- docker run -v /home/adrian/data:/data [image]
-v A:B A是在主机上的地址,B是在容器中的地址,一旦容器运行,AB的会完全同步。
容器和容器之间的数据共享
使用--volumes-from, docker run -it -h NEWCONTAINER --volumes-from container-test debian /bin/bash 意思是,将container-test这个container中的volume挂载到当前将要运行起来的容器中。前提是container-test中的volumes必须被创建过,但是container-test可以是被stop的,原因是volume只能被手动删除,不是随着容器停止而被删除
数据容器
准备一个容器专门用来做数据容器,比如docker run -d -v /dbdata --name dbdata postgres echo Data-only container for postgres运行postgres这个容器然后给他配置一个volume,其他容器都可以--volumes-from到这个volume,数据容器可以不在运行状态甚至可以被删除,只要volume创建了即可。
Docker集成mysql
docker volume create mysql_data 本地创建个卷
docker run --name mysql -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7 关联卷到容器/var/lib/mysql
docker exec -it ed9e90ded02c /bin/bash进入容器
mysql -u root -p输入密码root
允许远程连接 GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'yourpassword';
dockerfile
FROM java:8
EXPOSE 88
VOLUME /logs(默认内置tomcat的日志生成在jar包同路径下的logs文件夹下,随机到宿主机/var/lib/docker/volumes下)
ADD hsjc-0.0.1-SNAPSHOT.jar hsjc.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/hsjc.jar"]
运行web连接mysql容器 docker run --name hsjc-web(容器名称) -d -p 88:88 --link mysql(mysql容器名称):mysql(别名) -v /usr/docker/logs:/logs hsjc-web(镜像名称)
宿主机与容器文件拷贝 docker cp 宿主机文件地址 容器id:/opt/ (反过来亦可以)