文章目录
一、安装
1、移除系统自带Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# docker-ce是Docker服务器
# docker-ce-cli是Docker命令工具
# containerd.io是Docker环境
# 安装其他版本
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
4、启动并开机启动
systemctl enable docker --now
5、配置加速镜像
# 创建路径
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
# 重启
sudo systemctl restart docker
二、Docker使用命令
1、镜像操作命令
(1)、查找:Docker Hub官网
(2)、下载:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
注意:使用命令加上--help
可以查看命令详细介绍,例如:docker pull --help
# 例如下载最新版nginx
docker pull nginx
# 例如下载指定版本nginx
docker pull nginx:1.20.1
(3)、查看下载的镜像:docker images [OPTIONS] [REPOSITORY[:TAG]]
# 查看所有下载的镜像
docker images
(4)、删除镜像:docker rmi [OPTIONS] IMAGE [IMAGE...]
# 删除nginx镜像
docker rmi nginx
2、容器操作命令
(1)、创建并启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name=nginx -d --restart=always -p 88:80 nginx
# --name:启动容器的名称
# -d:后台运行
# -p 88:80将容器内部端口80映射到服务器88端口
# --restart=always: 开机自启
常用OPTIONS 说明 | 作用 |
---|---|
–name | 启动容器的名称 |
-d | 后台运行 |
–restart=always | 开机自启 |
-p 88:80 | 将容器内部端口80映射到服务器88端口 |
启动之后访问http://139.198.42.140:88/,如果是云服务器需要在安全组开放88端口
(2)、查看容器:docker ps [OPTIONS]
# 查看正在运行的容器
docker ps
常用OPTIONS 说明 | 作用 |
---|---|
-a | 查看所有容器(默认不展示未运行的容器) |
-n | 查看最后启动的n个容器 |
-l | 查看最后一个启动的容器 |
(3)、停止容器:docker stop [OPTIONS] CONTAINER [CONTAINER...]
# 先用docker ps查看容器名称或者容器ID
docker stop 容器名称或者容器ID
#再次启动
docker start 容器名称或者容器ID
(4)、删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 删除停止的容器
docker rm 容器名称或者容器ID
# 强制删除正在运行中的
docker rm -f 容器名称或者容器ID
(5)、修改已经创建容器的参数:docker update [OPTIONS] CONTAINER [CONTAINER...]
,部分参数不可修改:例如-p
和-v
#修改--restart
docker update 容器名称或者容器ID --restart=no
3、进入容器内部修改文件
docker exec -it 容器名称或者容器ID /bin/bash
以nginx为例,在Docker Hub可看到nginx的页面路径:/usr/share/nginx/html,进入容器内部修改/usr/share/nginx/html/index.html,新刷页面即可看到变化。
4、从容器创建一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
常用OPTIONS 说明 | 作用 |
---|---|
-a | 提交作者 |
-m | 提交说明 |
-p | 提交时暂停容器 |
docker commit -a "wg" -m "修改首页" f826b3307fe4 mynginx:1.0
5、共享镜像到其他主机
(1)、打包传输,然后解压,打包镜像:docker save -o mynginx.tar mynginx:1.0
,把压缩包包传输到其他主机解压镜像:docker load -i mynginx.tar
。
(2)、将本地的镜像上传到镜像仓库(要先登陆到镜像仓库):
a、在Docker Hub官网注册账号,用户名为studydocker88,并创建仓库,仓库名为mynginx;
b、docker login
输入用户名和密码登录;
c、docker tag mynginx:1.0 studydocker88/mynginx:1.0
标记本地镜像mynginx:1.0,将其归入myimages仓库;
d、docker push studydocker88/mynginx:1.0
,推送镜像到远程仓库;
e、其他主机即可拉取镜像:docker pull studydocker88/mynginx:1.0
;
g、然后创建容器并启动:docker run -d -p 99:80 studydocker88/mynginx:1.0
,打开99端口。
6、容器和主机文件挂载
注意:命令太长可以用“ \”换行
docker run --name=nginx -d --restart=always \
-p 88:80 -v /data/html:/usr/share/nginx/html nginx
现在访问http://139.198.42.140:88/
原因是挂载的路径下面没有页面,在主机路径/data/html下创建一个index.html,内容如下:
<h1>Study Docker</h1>
然后再次访问
7、获取容器或者镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
8、查看容器日志
docker logs [OPTIONS] CONTAINER
常用OPTIONS 说明 | 作用 |
---|---|
-f | 跟踪日志输出 |
–since | 显示某个开始时间的所有日志 |
-t | 显示时间戳 |
–tail | 仅列出最新N条容器日志 |
9、容器与主机之间的数据拷贝
nginx拷贝容器数据到主机
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
# 5eff66eec7e1是容器ID
nginx拷贝主机数据到容器
ocker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf
# 5eff66eec7e1是容器ID
10、docker安装mysql
mysql需要:
- 暴露端口
- 挂载mysql数据到主机
- 挂载配置文件到主机
- 执行参数MYSQL_ROOT_PASSWORD来给mysql配置登录密码
首先创建路径/mydata/mysql/log、/mydata/mysql/data、/mydata/mysql/conf,然后在/mydata/mysql/conf路径创建my.cnf,内容如下:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
然后执行以下命令即可
docker run -p 3306:3306 --name mysql-01 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
-d mysql:5.7
三、Docker进阶部署一个Java应用
1、创建SpringBoot工程
在idea中新建project,选中maven:
输入项目名称,点击完成:
完整pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>java-demo01</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建启动类Application.java:
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2、安装redis
(1)拉取redis镜像:docker pull redis
(2)数据和配置文件映射主服务器路径
在主机创建路径/data/redis/data
和/data/redis/conf
:
在/data/redis/conf
路径创建redis.conf并加入以下内容:
appendonly yes
requirepass 123456
(3)创建并运行容器:
docker run -v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis redis-server /etc/redis/redis.conf
用工具测试连接成功,云服务器注意要放行6379端口,密码是配置文件requirepass的值。
3、创建controller
创建HelloController:
内容如下:
package com.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
RedisTemplate redisTemplate;
@RequestMapping("hello")
public String hello(){
long count = redisTemplate.opsForValue().increment("count");
return "此页面被访问了【"+count+"】次";
}
}
创建application.properties,内容如下:
spring.redis.host=139.198.33.29
spring.redis.password=123456
工程结构:
启动之后访问http://localhost:8080/hello
4、创建Dockerfile
先用maven打包:
Dockerfile内容如下:
FROM openjdk:8-jdk-slim
COPY target/*.jar /app.jar
ENTRYPOINT ["java","-jar","app.jar"]
openjdk:8-jdk-slim是jdk瘦身版,可以再Docker Hub去找,因为web程序需要jdk环境。
5、创建镜像,创建容器并启动
在服务器创建路径/data/javaApp/target/
,把Dockerfile拷贝到/data/javaApp/
,把jar文件拷贝到/data/javaApp/target/
,在/data/javaApp/
路径执行:docker build -t java-demo:v1.0 .
(注意后面有个点,表示从当前路径开始),最后创建容器并启动docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
,然后docker ps
查看是否启动成功。
启动成功访问http://139.198.33.29:8080/hello,注意云服务器注意要放行8080端口
如果想让其他服务器执行java镜像,推送到远程仓库或者拷贝都可以。