docker笔记
安装docker
-
查看系统内核环境 uname -r
3.10.0-1160.el7.x86_64 -
查看系统版本 cat /etc/os-release
NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" -
安装需要的安装包
yum install -y yum-utils -
设置阿里云镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
更新软件包索引
yum makecache fast -
安装 最新版本 社区版
yum install docker-ce docker-ce-cli containerd.io -
启动docker
systemctl start docker docker version -
构建hello-world程序
docker run hello-world -
查看下载的hello-world镜像
docker images -
卸载docker
yum remove docker-ce docker-ce-cli containerd.io rm -f /var/lib/docker
docker run启动流程
-
在本机查找镜像,找到直接运行
-
若找不到,到仓库中查找镜像,找到后下载到本地,直接运行
底层原理
- docker是一个client-server结构
- 客户端通过socket与主机交互,通过后台守护进程创建docker容器实例
新建一个容器,docker使用宿主机操作系统,无需重新再加载内核。而虚拟机需要加载Guset OS。
设置镜像地址
vi /etc/docker/daemon.json
输入镜像地址
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
保存文本,重启docker
systemctl restart docker
docker常用命令
docker info #显示docker主机详细信息
docker version #docker版本
docker xxx --help #查看命令帮助
镜像命令
docker images #查看docker镜像
docker search xxx #搜索xxx镜像 --filter=STARS=3000 过滤3000以上
docker pull xxx #下载xxx镜像的最新版
docker pull mysql:5.7 #下载mysql5.7版本
docker rmi -f xxx #根据xxx镜像id,删除镜像
docker rmi -f $(docker images -aq) # 删除所有镜像
分层下载 docker images核心 联合文件系统
容器命令
docker run [可选参数] image
--name="NAME" 容器名字
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 主机端口:容器端口 指定容器端口
docker run -it centos /bin/bash #启动并进入容器
exit #从容器中退出
ctrl + P + Q #容器不停止,退出
docker ps #查看运行中容器
docker ps -a #当前+历史容器
docker ps -a -n=1 #最近的容器
docker ps -aq #当前所有的容器编号
docker rm 容器id #根据id删除容器,不能删除正在运行容器
docker rm -f $(docker ps -ap) #强制删除所有容器,包括正在运行的
docker start #启动容器
docker restart #重启容器
docker stop #停止容器
docker kill #强制当前容器
docker inspect 容器id #查看容器详细信息
docker exec -it 容器id /bin/bash #打开新的终端,进入容器
docker attach 容器id #进入容器正在执行的终端
从容器拷贝到主机
在主机终端
docker cp 容器id:容器路径 主机路径
#加--rmc下载完tomcat,执行后删除
docker run -it --rm tomcat:9.0
提交容器到本地镜像
docker commit -m="docker镜像描述" -a="作者" 容器id 镜像名:版本号
容器数据卷
使用命令直接挂载
docker run -it -v 主机目录:容器内目录 镜像id /bin/bash
# 挂载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=123 --name mysql01 mysql:5.7
# -e 环境配置
具名挂载和匿名挂载
# 匿名挂载 不指定主机地址 而指定容器内部地址
docker run -d -P -v /etc/nginx nginx
# -P 随机映射
docker volume ls # 查看所有卷
# 具名挂载 -v之后没有/而是一个具名,代表容器内部地址映射主机地址的名称
docker run -d -P -v juming-nginx:/etc/nginx nginx
docker volume inspect juming-nginx # 查看具名对应主机的路径
# 数据卷具体位置在主机 /var/lib/docker/volumes
# 通过-v 容器内路径:ro rw 改变读写权限 ro只读 rw可读可写
使用dockerfile 挂载目录
FROM centos
VOLUMES ["volume01","volume02"]
docker bulid -f dockerFile目录 -t /容器名称:版本 . # 根据dockerFile生成镜像
# 注意最后面有一个.表示当前目录是上下文环境,代表从当前目录下找到dockerFile文件
docker inspect 容器id #可以在Mounts看到挂载的两个volumes对应主机目录
容器数据卷(容器之间目录同步)
docker run -d --name docker02 --volumes-form docker01 centos
# 通过--volumes-from 容器id 同步docker01的挂载目录
Dockerfile
# 构建自己的centos
FROM centos
ENV MYPATH /usr/local
WORKDIR #MYPATH # 进到容器中的默认,工作目录
RUM yum -y install vim # 镜像构建时会执行的命令
RUM yum -y install net-tools
EXPOSE 80
CMD /bin/bash # 容器启动时执行的命令
docker history 镜像id # 查看镜像历史
CMD和ENTRYPOINT区别
CMD 指定容器启动时运行的命令,只有最后一个会生效
FROM centos
CMD ["ls","-a"]
镜像run的时候执行最后一个CMD命令,如果run命令后有追加命令,会将文件中的CMD替换掉
docker run 镜像命令 -l # 这时-l会把CMD命令替换,产生报错
docker run 镜像命令 ls -al
ENTRYPOINT 容器启动运行的命令,可以追加命令
FROM centos
ENTRYPOINT ["ls","-a"]
镜像run时,追加命令时,是可以与ENTRYPOINT中的命令追加
构建tomcat镜像
FROM centos
ADD jdkxxx.tar.gz # 引入jdk
ADD tomcatxxx.tar.gz # 引入tomcat
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 配置java环境变量
ENV JAVA_HOME /usr/local/jdk1.8xxx
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 配置tomcat环境变量
ENV CATALINA_HOME /usr/local/tomcatxxx
ENV CATALINA_BASH /usr/local/tomcatxxx
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_BASH/bin
EXPOSE 8080
CMD /usr/local/tomcatxxx/bin/startup.sh
修改tag
docker tag 镜像id username/imagename:1.0

浙公网安备 33010602011771号