Docker
Docker 基本操作
快速开始
docker pull ubuntu
docker run -d -it -p 22:22 -v /Users/qiuyeyijian/Workspace/Docker/ubuntu:/home/Workspace --name ubuntu ubuntu
docker attach 容器id/name
sudo docker exec -it 容器id/name /bin/bash
docker system df --verbose-it: 以交互方式启动容器-p: 当前物理机端口到容器端口的映射--name: 为当前要运行的容器起个名字-v: 本地路径到容器内路径的映射-d: 代表后台运行容器--restart=always
更新软件源:ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
如果报The certificate is NOT trusted. 在docker中执行如下命令
touch /etc/apt/apt.conf.d/99verify-peer.conf && echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"安装 Docker
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker
# Step 5: 设置开机自启动
sudo systemctl enable docker
# Step 6: 测试
docker run hello-worldDocker 的中央仓库
Docker 官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢
国内镜像网站:网易蜂巢,daocloud...
http://hub.daocloud.io (推荐使用)
在公司内部会采用私服的方式拉去镜像(添加配置)
镜像的操作
下面均使用 DaoCloud 镜像站来拉去镜像
1. 拉取镜像到本地
docker pull 镜像名称[:tag]
# 举个例子, 这里使用daocloud镜像站
docker pull daocloud.io/library/tomcat:8.5.15-jre82. 查看本地全部镜像
docker images3. 删除本地镜像
docker rmi 镜像的标识4. 镜像的导入导出(不规范)
# 将本地的镜像导出
docker save -o 导出路径 镜像id
# 加载本地的镜像文件
docker load -i 镜像文件
# 修改镜像名称
docker tag 镜像id 新镜像名称:版本容器的操作
1. 运行容器
# 简单操作
docker run 镜像标识 | 镜像名称[:tag]# 常用操作
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像名称|镜像标识[:tag]
- -d => 代表后台运行容器
- -p 宿主机端口:容器端口 => 当前 Linux 物理机端口到容器端口的映射
- --name 容器名称 => 为当前要运行的容器起个名字
2. 查看正在运行的容器
docker ps [-qa]
- -a => 查看全部容器,包括没有运行的
- -q => 只查看容器得到的标识
3. 查看容器日志
docker logs -f 容器id4. 进入容器内部
docker exec -it 容器id /bin/bash5. 删除容器
删除容器前请先停止容器
# 1. 停止指定容器
docker stop 容器id
# 2. 停止所有容器
docker stop $(docker ps -qa)
# 3. 删除指定容器
docker rm 容器id
# 4. 删除全部容器
docker rm $(docker ps -qa)6. 启动容器
docker start 容器idDocker 的应用
#可以通过命令将宿主机的内容复制到容器内部
docker cp 文件名称 容器id:容器内部路径数据卷基本操作
为了部署 SSM 的工程,需要使用到 cp 命令将宿主机内的 war 包复制到容器内部。
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件也会跟着一起改变。
1. 创建数据卷
# 创建数据卷后,默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称2. 查看数据卷的详细信息
docker volume inspect 数据卷名称3. 查看全部数据卷
docker volume ls4. 删除数据卷
docker volume rm 数据卷名称数据卷应用
当你映射数据卷是,如果数据卷不存在,docker 会帮你自动创建。将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 数据卷名称:容器内部的路径 镜像id如果指定一个路径作为数据卷的存放位置,这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像idDocker 自定义镜像
中央仓库上的镜像,也是 Docker 的用户自己上传的
1. 创建一个 Dockerfile 文件,并且自定义镜像信息
vim DockerfileDockerfile 文件中常用的内容
- from => 指定当前自定义镜像依赖的环境
- copy => 将相对路径下的内容复制到自定义镜像中
- workdir => 声明镜像的默认工作目录
- cmd => 需要执行的命令(在 workdir 下执行的,cmd 可以写多个,只以最后一个为准)
# 举个栗子 vim /root/workspace/Dockerfile
from daocloud.io/library/tomcat:8.5.15-jre8
copy /root/workspace/ssm.war /usr/local/tomcat/webapps# 写好Dockerfile文件后,在Dockerfile文件目录下,运行命令制作镜像
docker build -t 镜像名称:[tag] /root/workspace/DockerfileDocker-Compose
之前运行一个镜像,需要添加大量参数。可以通过 Docker-Compose 编写这些参数
Docker-Compose 可以帮助我们批量地管理容器,只需要通过一个
docker-compose.yml文件去维护即可
下载安装
1. 去 GitHub 下载 Docker-Compose
2. 赋予可执行权限
# 重命名,方便接下来的操作
mv docker-compose-Linux-x86_64 docker-compose
# 赋予可执行权限
chmod 755 docker-compose3. 配置环境变量
# 将docker-compose文件移动到 /usr/local/bin
mv docker-compose /usr/local/bin
echo "export PATH=$PATH:/usr/local/bin" >> /etc/profile.d/docker-compose.sh
chmod 755 /etc/profile.d/docker-compose.sh编写配置文件
yml 文件以 key:value 方式来指定配置信息
多个配置信息以换行+空格缩进的方式来区分
在 docker-compose.yml 文件中,不要使用制表符
version: "3.1"
services:
mysql: # 服务名称
restart: always #代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.6 #指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射,可以指定多个,在下面继续添加即可
environment:
MYSQL_ROOT_PASSWORD: root # 指定mysql的root用户的登录密码
TZ: Asia/Shanghai # 指定时区
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker/tomcat/webapps:/usr/local/tomcat/webapps
- /opt/docker/tomcat/logs:/usr/local/tomcat/logs使用 docker-compose 命名管理容器
在使用 docker-compose 的命令时,默认会在当前目录下找 docker-compose.yml 文件
# 启动管理的容器
docker-compose up -d
# 关闭并删除容器
docker-compose down
# 开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|resart
# 查看容器
docker-compose ps
#查看日志
docker-compose logs -fdocker-compose 配置 Dockfile 使用
使用 docker-compose.yml 文件以及 Dockerfile 文件在生成自定义镜像的同时启动当前镜像,并且又 docker-compose 去管理容器
# docker-compose.yml 文件
version: "3.1"
services:
test:
restart: always
build:
context: ./
dockerfile: Dockerfile
image: test:1.0.1
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai# Dockerfile 文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy /root/workspace/ssm.war /usr/local/tomcat/webapps可以直接启动基于 docker-compose.yml 以及 Dockerfile 文件构建的自定义镜像
docker-compose up -d如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
如果需要重新构建自定义镜像,使用
# 只是重新构建
docker-compose build
# 运行前构建
docker-compose up -d --buildDocker 一些问题
进入容器内部
//根据容器id 进入对应镜像文件夹, 可修改相关配置文件,
docker exec -it 容器id /bin/bash
//如果需要以root 用户的身份进入容器则使用
docker exec -it --user root 容器id /bin/bash容器自启动
运行容器的时候,加上 --restart=always 命令可以令容器自启动
docker run -d --restart=always -p 10240:8080 -p 10241:50000 -v /var/jenkins_node:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins如果启动容器的时候没有加 --restart=always 命令,可以使用如下命令,来更新
sudo docker update --restart=always 容器id使用 on-failure 策略时,指定 Docker 将尝试重新启动容器的最大次数。默认情况下,Docker 将尝试永远重新启动容器。
sudo docker update --restart=on-failure:10 容器id //最大重启10次--restart 具体参数值详细信息:
--restat=no容器退出时,不重启容器--restart=no-failure只有在非 0 状态退出时才重新启动容器;--restart=always无论退出状态是如何,都重启容器;
Docker CI, CD
MYSQL
# 拉取镜像
sudo docker run -p 3306:3306 --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysqlTomcat
version: "3.1"
services:
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker/tomcat/webapps:/usr/local/tomcat/webapps
- /opt/docker/tomcat/logs:/usr/local/tomcat/logs
秋叶依剑