安装Docker
卸载
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
安装docker
# 虚拟机联网,安装yum工具 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken # 设置docker镜像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo yum makecache fast yum install -y docker-ce
启动docker
# 关闭 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld # 启动docker服务 systemctl start docker # 停止docker服务 systemctl stop docker # 重启docker服务 systemctl restart docker # 查看docker版本 docker -v
配置Dokcer镜像加速
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://0qcqt068.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker
安装DockerCompose
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 修改权限
chmod +x /usr/local/bin/docker-compose
# Base自动补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 如果这里出现错误,需要修改自己的hosts文件
echo "185.199.108.133 raw.githubusercontent.com" >> /etc/hosts
基本 操作
镜像操作
# 构建镜像
docker build
# 推送镜像到服务
docker push
# 从服务拉取镜像
docker pull
# 保存镜像为一个压缩包
docker save
# 加载压缩包为镜像
docker load
案例1 保存、导入Nginx镜像
docker pull nginx
docker images
docker save --help
# docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest
docker rmi nginx:latest
docker load -i nginx.tar
容器操作
docker run
docker pause
docker unpause
docker stop
docker start
# 删除一个容器
docker rm
# 查看容器状态
docker ps -a
案例2 创建并运行一个程序
# -d:后台运行容器
# -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
# nginx:镜像名称,例如nginx
docker run --name containerName -p 80:80 -d nginx
案例3 进入容器,修改文件
# docker exec :进入容器内部,执行一个命令
# -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
# mn :要进入的容器的名称
# bash:进入容器后执行的命令,bash是一个linux终端交互命令
docker exec -it mn bash
# 进入nginx的HTML所在目录
cd /usr/share/nginx/html
# 容器内没有vi命令,无法直接修改
sed -i -e 's#helloworld#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
# 在浏览器访问自己的虚拟机地址
数据卷(容器数据管理)
# 创建一个volume
docker volume create
# 显示一个或多个volume的信息
docker volume inspect
# 列出所有的volume
docker volume ls
# 删除未使用的volume
docker volume prune
# 删除一个或多个指定的volume
docker volume rm
# 在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录
# 把html数据卷挂载到容器内的/root/html这个目录中
docker run \
--name mn \
-v html:/root/html \
-p 8080:80
nginx \
# 容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上
# -v [宿主机目录]:[容器内目录]
# -v [宿主机文件]:[容器内文件]
案例4 给nginx挂载数据卷
# 创建容器并挂载数据卷到容器内的HTML目录
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
Dockerfile自定义镜像
基于Ubuntu构建Java项目
# 新建一个空文件夹docker-demo
# 拷贝docker-demo.jar文件到docker-demo这个目录
# 拷贝jdk8.tar.gz文件到docker-demo这个目录
# 拷贝Dockerfile到docker-demo这个目录
# 其中的内容如下
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
# 将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下
# 运行命令
docker build -t javaweb:1.0 .
# 访问
http://192.168.50.132:8090/hello/count
基于java:8-alpine镜像,将一个Java项目构建为镜像
# 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
# 拷贝docker-demo.jar到这个目录中
# 编写Dockerfile文件
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar
# 使用docker build命令构建镜像
docker build -t demo:1.0 .
# 使用docker run创建容器并运行
docker run --name demo -p 8090:8090 -d demo:1.0
# 访问
http://192.168.50.132:8090/hello/count
Docker-Compose
docker-compose.yml
docker-compose up -d
docker-compose logs -f
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
使用DockerCompose部署带有图象界面的DockerRegistry
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=李煊的私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
# 配置Docker信任地址
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.50.132:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker
推送、拉取镜像
# 重新tag本地镜像,名称前缀为私有仓库的地址:http://192.168.50.132:8080/
docker tag nginx:latest 192.168.50.132:8080/nginx:1.0
# 推送镜像
docker push 192.168.50.132:8080/nginx:1.0
# 拉取镜像
docker pull 192.168.50.132:8080/nginx:1.0