Docker入门学习

308 阅读5分钟

Docker 基础

安装docker

对应CentOS 7.3

  • 升级yum
yum update
  • 安装必须的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 设置yum源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker
yum install docker-ce
  • 验证
docker -v

配置镜像拉取地址

修改 /ect/docker/daemon.json,第一次安装docker,并没有这个文件。

{
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

启动docker

  1. 启动docker

    systemctl start docker
    
  2. 检查docker启动状态

    systemctl status docker
    
  3. 关闭docker

    systemctl stop docker
    
  4. 重启docker

    systemctl restart docker
    
  5. 开机自启动docker

    systemctl enable docker
    
  6. docker信息查看

    docker -info
    
  7. docker在线帮助文档

    docker --help
    

镜像相关

  1. 查看镜像列表

    docker images
    
  2. 搜索镜像

    docker search [name]
    
  3. 拉取镜像

    docker pull [name]
    
  4. 删除镜像(按照镜像Id删除镜像)

    docker rmi [imagesId]
    
  5. 删除所有镜像

    docker rmi `docker images -q`
    

容器相关命令

  1. 查看正在运行的容器

    docker ps
    

    查看所有容器

    docker ps -a
    

    查看最后一次运行的容器

    docker ps -l
    

    查看停止的容器

    docker ps -f status=exited
    
  2. 创建启动容器

    docker run	
    

    i: 表示运行容器。

    t: 表示容器启动后会进入其命令行。加上这个参数后,容器创建就能登录进去。即分配一个伪终端。

    name: 为容器命名。

    v: 表示目录映射关系。

    d: 创建一个守护容器,这样创建的容器不会自动登录容器,如果只加-i, -t两个参数,创建后就会自动进去容器。

    p: 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。

  3. 交互式方式创建容器

    docker run -it --name=容器名称 镜像名称:标签 /bin/bash
    

    返回到宿主机(退出当前容器)

    exit
    

    退出容器,容器会停止。

  4. 以守护式的方式创建线程

    docker run -di --name=容器名称 镜像名称:标签
    

    注意:容器名称不能重复

    进入容器

    docker exec -it 容器名称 /bin/bash
    

    退出容器,容器仍然会继续运行

  5. 启动容器

    docker start 容器名称[容器Id]
    
  6. 停止容器

    docker stop 容器名称[容器Id]
    

文件操作

  1. 文件复制

    将宿主机的文件复制到docker容器中

    docker cp [宿主机文件全路径] 容器名称:位置
    

    查看时,使用dir命令查看

    dir /usr/local

    将docker容器中的文件复制到宿主机中

    docker cp 容器名称:位置 [宿主机文件全路径]
    

目录挂载

  1. 创建容器时,指定目录挂载

    docker run -di --name=容器名称 -v 宿主机文件目录:容器文件目录 容器名称:位置
    

查看容器IP地址

  1. 查看容器运行时的各种数据

    docker inspect 容器名称:位置
    
  2. 直接获取ip

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称:位置
    

删除容器

  1. 删除容器

    docker rm 容器名称
    

    移除容器之前,容器必须先关闭

容器部署

  1. MySQL部署

    (1)拉取镜像

    docker pull mysql
    

    (2)创建容器

    docker run -di --name=mysql-1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
    

    注意: 第一次创建mysql容器,需要去修改mysql的登录密码。否则在使用navicat连接mysql时,会出现2059错误

    使用navicat连接时,ip地址为宿主机的ip地址,端口号为宿主机映射的端口号。

  2. Tomcat部署

    (1)拉取镜像

    docker pull tomcat
    

    (2)创建容器

    docker run -di --name=tomcat-1 -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:latest
    
  3. Nginx部署

    (1)拉取镜像

    docker pull nginx
    

    (2)创建容器

    docker run -di --name=nginx-1 -p 80:80 nginx
    

    注意: 配置静态资源资源路径和对应nginx配置文件的地址

  4. Redis部署

    (1)拉取镜像

    docker pull redis
    

    (2)创建容器

    docker run -di --name=redis-1 -p 6379:6379 redis
    

docker 备份与迁移

  1. 将容器保存为镜像

    docker commit 容器名称 镜像名称
    
  2. 将镜像备份(导出为文件)

docker save -o 文件名 镜像
  1. 将镜像文件恢复为docker镜像

    docker load -i 文件名
    

Dockerfile

​ Dockerfile是由一系列命令和参数构成的脚本,这些 命令应用于基础镜像并最终创建一个新的镜像。

  1. 对于开发人与:可以为开发团队提供一个完全一致的开发环境;
  2. 对于测试人员:可以直接拿开发时锁构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

一、 常用命令

命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量(可以编写多条)
RUN command是Dockerfile的核心部分(可以编写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和add相似,但是压缩文件不能被解压
WORKDIR path_dir设置工作目录

Docker启动RabbitMQ

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

IDEA集成Docker实现镜像打包一键部署

  1. Docker 开启远程访问

    # 修改该Docker服务器文件
    vi /lib/systemd/system/docker.service
    # 替换ExecStart
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2357 -H unix:///var/run/docker.sock
    
    # 重新加载docker配置文件
    systemctl daemon-reload
    # 重启docker 
    systemctm restart docker
    
    # 查看2357端口是否启动
    netstat -nlpt
    # 开启2357端口的外部访问
    firewall-cmd --zone=public --add-port=2357/tcp --permanent