Docker安装及使用
本文主要为Docker的基础知识
Centos7更换阿里源
cd /etc cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.back #建议备份或者改名 wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache #生成缓存
Docker安装
Uninstall old versions
Older versions of Docker were called docker
or docker-engine
. If these are installed, uninstall them, along with associated dependencies.
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
yum安装gcc相关
yum -y install gcc yum -y install gcc-c++
【报错】yum install -y gcc报错的解决方法如下
错误:软件包:glibc-2.17-196.el7.i686 (yum.repo)
需要:glibc-common = 2.17-196.el7 已安装: glibc-common-2.17-222.el7.x86_64 (@base) glibc-common = 2.17-222.el7 可用: glibc-common-2.17-196.el7.x86_64 (yum.repo) glibc-common = 2.17-196.el7
错误:软件包:gcc-4.8.5-16.el7.x86_64 (yum.repo)
需要:cpp = 4.8.5-16.el7 已安装: cpp-4.8.5-28.el7_5.1.x86_64 (@updates) cpp = 4.8.2-16.el7_5 cpp = 4.8.5-28.el7_5.1 可用: cpp-4.8.5-16.el7.x86_64 (yum.repo) cpp = 4.8.5-16.el7 cpp = 4.8.2-16.
以上问题解决办法:输入命令:yum distro-sync
设置stable镜像仓库
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://mirror.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新数据索引
yum makecache fast
安装docker
yum -y install docker-ce
启动docker
systemctl start docker
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,镜像地址是自己的
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-‘EOF‘ { "registry-mirrors": ["https://qnls4bm7.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
Docker常用命令
镜像命令
#获取当前镜像id docker images -q #获取所有镜像id docker images -qa #搜索镜像 docker search 镜像名 #拉取镜像 docker pull 镜像名:tag #删除单个镜像 docker rmi -f 镜像id #删除多个镜像 docker rmi -f 镜像id:tag 镜像id:tag #删除全部(慎用!) docker rmi -f $(docker images -qa)
容器命令
容器启动(run)
调用格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
常用的参数主要有:
- -it : 启动容器后会自动进入容器交互命令行,快捷键Ctrl+PQ 断开容器shell连接但是容器后台运行,exit:容器停止退出
- -d : 启动容器后,不进入容器命令交互行
- --name : 指定容器运行后的名字,若不指定,随机生成
- -p :指定交互的端口映射, -p linux_port:docker_container_port
- -P :随机分配端口,一般不这样用
- -v : 挂在指定volume,用于容器与实际文件交互 -v linux_absolut_path:container_absolute_path
- --link :使容器与容器能够互相通信,--link [容器名/id]:[连接名]
- --restart :利用重启策略自我修复容器,always在重启docker服务后,会自动重启容器(即使在重启服务前停止了该容器),unless-stopped则不会;on-failure会在容器退出并且返回值不是0的时候重启容器。
容器其他操作
# 查看所有在运行的容器 docker container ls docker ps -l (上一次运行的容器) -n 3(上三次运行的容器) # 查看所有容器,已停止的容器也会显示 docker container ls -a docker ps -a # 停止运行容器 docker kill container_id/container_name (强制停止) docker stop container_id/container_name # 启动/重启停止了的容器 docker start/restart container_id/container_name # 删除未运行的容器 docker rm container_id/container_name
重要的一些操作
#启动守护式容器 docker run -d 容器名 #查看容器日志 docker logs -f -t --tail 容器id 【注】-t 加入时间戳 -f跟随最新打印日志 #查看容器内运行的进程 docker top 容器id # 查看容器配置的细节和运行时信息 docker inspect container_id/container_name # 对运行时的容器,运行bash命令 docker exec container_id/container_name bash_commands 在容器中打开新的终端 docker attach container_id/container_name bash_commands 直接进入容器启动的终端 # 后面添加 -it 会连接到容器的shell进程 docker exec -it container_id/container_name bash_commands #从容器内拷贝文件到主机上 docker cp 容器id:容器内路径 目的主机路径 #提交容器副本使之成为一个新的镜像 docker commit -m="描述信息" -a="作者" 容器id 要创建的目标镜像名:[tag]
容器数据卷
【容器和宿主机之间数据共享】
1、直接命令添加
docker run -it -v linux_absolut_path:container_absolute_path 镜像名 #容器内数据只读(ro:read only) docker run -it -v linux_absolut_path:container_absolute_path:ro 镜像名
2、DockerFile添加
数据卷容器
【容器和容器之间数据共享】
#语法,容器1继承容器2 docker run -it --name 容器名1 --volumes-from 容器名2 镜像名 【结论】 容器间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。(没死绝就都有)
DockerFile解析
构建三步骤
1、编写dockerfile文件
2、 docker build
3、docker run
DockerFile内容基础知识:
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
大致流程:
- docker从基础镜像运行一个容器
- 执行一条指令并对容器进行修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker在基于刚提交的镜像运行一个新的容器
- 执行DockerFile中的下一条指令知道所有指令都执行完成
保留字指令
- ADD
- 将主机目录下文件拷贝到镜像,且会自动处理url和tar压缩包
- COPY
- 和ADD类似,区别是不会自动解压,从源路径到镜像内目标路径
- FROM
- 基础镜像,当前新镜像基于那个镜像拓展
- RUN
- 构建容器时要运行的bash命令
- EXPOSE
- 创建容器后对外暴露出的端口
- WORKDIR
- 创建容器后,终端默认登陆进入的工作目录
- ENV
- 构建镜像过程中设置的环境变量
- VOLUME
- 容器数据卷,用于数据保存和持久化工作
- CMD
- 指定容器启动时要运行的命令,可以有多个,但是只有最后一个会生效,可在docker run 后通过指令进行参数替换
- ENTRYPOINT
- 容器启动时要运行的命令,目的和CMD一样,可在docker run 后通过指令进行参数追加
- ONBUILD
- 当前镜像被继承使用时,触发该语句后的内容
- MAINTAINER
- 镜像维护者的姓名和邮箱地址
案例
1、Base镜像(scratch)
99%都是FROM scratch
2、自定义mycentos
dockerfile文件:
FROM centos ENV mypath /tmp WORKDIR $mypath #让它支持vim以及ifconfig RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD /bin/bash
运行:
docker build -f /mydocker/dockerfile -t mycentos:1.3 .
- -f:指定dockerfile文件路径
- -t:指定镜像名字及标签
- 注意“."不能忘
3、自定义镜像tomcat9
小总结
Docker常用安装
安装Tomcat
安装mysql
docker run -p 3306:3306 --name mysql -v /msuse/mysql/conf:/etc/mysql/conf.d -v /msuse/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
安装Redis
docker run -p 6379:6379 -v /msuse/myredis/data:/data -v /msuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes