docker容器的使用
docker容器
什么是docker
环境配置、虚拟化技术、进程隔离
什么是docker镜像
docker镜像是动态容器的静态表示,一个运行的docker容器是一个镜像的实例
docker与虚拟机的比较
启动虚拟机需要先启动虚拟机上的操作系统,再启动应用,这个过程很慢,操作系统需要占用大量的磁盘、内存和CPU资源;
启动docker相当于启动宿主操作系统上的一个进程,在运行时占用很少的资源;
docker的优点
容易迁移、容易维护、容易扩展
命令
补充
将容器打包成镜像:docker commit miaosha01 miaosha4
基础命令
systemctl start docker启动docker
systemctl restart docker重启docker
systemctl enable docker开机自启docker
docker version 查看docker版本信息
docker history 容器id查看镜像构建过程
docker info 查看docker任务管理器
docker inspect 容器id 查看容器信息
docker run hello-world运行helloworld镜像
docker images 查看所有镜像
docker stats 查看容器占用cpu情况
docker save -o miaosha.tar miaosha2 容器存储为本地文件
docker load -i miaosha.tar 加载本地镜像文件
docker search mysql 搜索mysql镜像
docker pull mysql 下载mysql镜像
docker rmi -f mysql hello 删除镜像两个
docker rmi -f $(docker images -aq) 删除所有镜像
docker ps -a -n=1 查看[正在][所有][历史1个]的容器
docker ps -q 显示正在运行容器的id
启动容器
docker run [参数] images 运行容器
docker run -it --rm tomcat:9.0
参数
--name 给容器起名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-P 指定容器端口 -P 3344:80 主机端口:容器端口
范例
1、docker run -it centos /bin/bash 交互启动centos在bash
2、docker run -d centos /bin/sh -c 'while true;do echo $PATH;sleep 2;done;' 后台启动容器
3、docker run -d --name nginx01 -p 3344:80 nginx
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止容器
docker kill 容器id 停止容器
退出容器
exit 停止退出
ctrl+p+q 退出容器不停止
docker kill 容器id 停止容器
docker rm 容器id 停止容器
docker rm -f $(docker ps -aq) 停止所有容器
docker ps -aq|xargs docker rm 停止所有容器
查看容器对象
docker logs -tf --tail 200 容器id 查看容器日志
docker top 容器id 查看容器任务
docker inspect 容器id 查看镜像元数据,配置文件
docker exec -it 容器id /bin/bash 进入容器开启新终端
docker attach 容器id 进入容器正在执行的终端
主机操作:拷贝容器内文件到主机
docker cp 容器id:容器路径 目的主机路径
范例:docker cp d077f6c46fa6:/home/kuangshen.java /home
提交镜像commit到docker容器管理
docker commit -m 'msg' -a 'lisi' 容器id [自定义name]
实例
1、创建默认tomcat
2、改动tomcat文件
3、使用命令生成镜像,保存到docker容器
容器数据卷/文件映射
功能:容器的持久化和同步操作;容器间数据共享
docker run -it -v 主机目录:容器目录 centos /bin/bash
实例
1、安装mysql镜像:下面
2、运行mysql:docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0
3、测试
镜像容器数据共享
kangshen_centos:1.0初始化本地与容器中一个共享目录
创建docker01
使用--volumes-from继承docker01的映射文件,使得两个容器数据共享
docker run -it --volumes-from 容器id 镜像
docker run -it --name docker02 --volumes-from docker01 kangshen_centos:1.0
构建docker镜像:Dockerfile
1、vim dockerfile
2、编写build文件
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "--end--"
3、使用docker build;-f配置文件 -t 镜像名称 .
docker build -f ./dockerfile -t kuangshen_centos:1.0 .
实例
FROM centos
MAINTAINER youisme<crk231@163.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u121-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
WORKDIR /usr/local
RUN yum -y install vim
EXPOSE 8090
CMD ["/bin/bash"]
制作镜像命令
docker build -f mkdockerfile -t mycentos:0.1 .
将文件变为可执行文件:chmod -R 777 *
查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
启用防火墙
systemctl enable firewalld
chkconfig iptables on
docker网络
目的:实现容器内部通过容器名称连通,即使每次启动容器ip改变
启动容器时默认桥接docker0如:docker run -it -P --name abc --net bridge centos 备注:--net bridge默认可省略
创建网络:实现上述目的
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
查看网络列表和信息
docker network ls
docker inspect mynet
使用此网络启动的多个容器,可以直接通过容器名访问
docker run -dit --name miaosha01 -P --net mynet miaosha2 /bin/bash
docker run -dit --name miaosha02 -P --net mynet miaosha2 /bin/bash
docker exec -it miaosha01 ping miaosha02
使用不同网络/网桥的容器如何连通
原理:一个容器在不同网络都有ip 作用:在tomcat容器中可以访问mynet网络中的容器
docker network connect mynet 另一个网络的容器tomcat