| systemctl start docker |
启动docker |
| systemctl enable docker |
开启开机自启 |
|
|
| docker search Name |
检索Docker镜像 |
| docker pull Name[:版本号] |
下载Docker镜像 |
| docker images |
查看已有镜像 |
| docker rmi 唯一ID |
删除指定ID的镜像 |
打算用这个
Docker容器操作
| docker run IMAGENAME |
运行容器 |
| docker ps [-a] / -a查看全部容器 |
查看容器 |
| docker stop ID / ID是唯一id 使用名字也可以 |
停止容器 |
| docker start ID / ID是唯一id 使用名字也可以 |
启动容器 |
| docker restart ID / ID是唯一id 使用名字也可以 |
重启容器 |
| docker stats ID / ID是唯一id 使用名字也可以 |
查看状态 |
| docker logs ID / ID是唯一id 使用名字也可以 |
查看日志 |
| docker exec -it ID FilePath / -it 是交互 |
进入docker |
| docker rm [-f] ID / ID是唯一id 使用名字也可以 -f强制 |
删除容器 |
|
|
| 容器发布和保存 |
|
| docker commit |
打包容器 为镜像 |
| docker save NAME:V save -o mynginx.tar mynginx:v1.0 |
保存镜像为文件 |
加载 save 的容器
docker load -i path 加载位于path的镜像
docker tag 改名
docker run
run后面加
docker commit
docker commit [Options] 镜像名称 [版本号]
- -m “消息” / 提交的内容
docker commit -m "update index.html" mynginx mynginx:v1.0
Docker Hub 如果是指定版本 这里搜索
- 镜像就是软件包
- 容器就是使用软件包启动的应用
- 容器和容器之间互相隔离,轻量级的vm,共享操作系统内核
安装Docker(Liunx)
前置
NTP服务
- sudo apt-get install ntpdate
同步
设置自动同步
- sudo crontab -e
- 0 0 * * * /usr/sbin/ntpdate ntp.ubuntu.com > /dev/null 2>&1
设置时区
- timedatectl set-timezone Asia/Shanghai
拉取公钥
1
2
3
4
5
6
|
sudo apt-get install ntpdate
nptdate time.windows.com
timedatectl set-timezone Asia/Shanghai
apt install gnupgs
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
|
Plugin | Docker Docs
-
更换源 mv -f /etc/apt/sources.list /etc/apt/sources.list.bak (可以不做)
-
创建源文件 vim sources.list
-
输入源信息
1
2
3
4
5
6
7
8
9
10
|
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
|
安装Docker
Doucker Engine -> Install
设置Docker存储库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#移除原有docker
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
|
安装Docker
1
|
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
国内加速源
1
2
3
4
5
6
7
8
9
10
|
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
#重启后台进程
sudo systemctl daemon-reload
#重启docker
sudo systemctl restart docker
|
实战 启动nginxWeb
- 下载镜像
- 启动容器
- 修改页面
- 保存镜像
- 分享
1
2
3
4
5
6
7
8
9
|
docker pull nginx
docker start nginx
docker exec -it nginx /usr/share/nginx/html (bash)
#保存为镜像
docker commint mynginx
#保存为文件
docker save -o mynginx.tar mynginx:v1.0
docker load -i mynginx.tar
|
Docker 存储
| docker volume ls |
查看全部卷 |
| docker inspect ngconf |
查看指定卷信息 |
快速卸载全部容器
1
2
3
4
|
#查看全部容器 只看id
docker ps -aq
#将结果传给命令
docker rm -f $(docker ps -aq)
|
目录挂载
1
2
3
4
5
|
#指定目录映射
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx
#可以映射多个
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html -v /app/ngconf:/etc/nginx --name app01 nginx
|
卷映射
1
2
3
|
#将v后面的路径更改为本地卷名
#存储在 /var/lib/docker/volumes/卷名
-v 卷名:/etc/nginx
|
Dicker 网络
默认网卡 docker0
| docker inspect NAME |
查看指定容器网络信息 |
创建自定义网络
1
2
3
4
|
docker network create Name
#列出网络
docker network ls
|
加入自定义网络
1
2
|
docker run -d -p 88:80 --name app1 --network NETWORKNAME nginx
docker run -d -p 99:80 --name app2 --network NETWORKNAME nginx
|
访问
1
2
|
docker exec -it app1 bash
curl http://app2:99
|
Redis集群
master
1
2
|
REDIS_REPLICATION_MODE=master
REDIS_PASSWORD=123456
|
slave
1
2
3
4
5
6
7
|
REDIS_REPLICATION_MODE=slave
REDIS_MASTER_HOST=redis01
REDIS_MASTER_PORT_NUMBER=6379
#访问master的密码
REDIS_MASTER_PASSWORD=123456
#本节点的访问密码
REDIS_PASSWORD=123456
|
启动容器
1
2
3
4
5
6
7
8
9
10
|
docker run -d -p 6379;6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network mynet \
--name redis01 \
bitnami/redis #镜像
#给目录权限
chmod -R 777 /app/rd1
|
Docker Compose
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#批量启动配置文件的容器
docker compose up -d
#批量关闭配置文件中的容器
docker compose down
#启动指定
docker compose start x1 x2 x3
#停止
docker compose start x1 x2 x3
#指定启动三个
docker compose scale x2=3
|
测试实验
编写WordPress 开源博客系统
创建网络
1
|
docker network create blog
|
创建MySQL容器
1
2
3
4
5
6
7
8
|
docker run -d -p 6666:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \ #卷映射
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \ #开启开机自启并设置name
--network blog \ #指定网络
mysql
|
创建博客系统容器
1
2
3
4
5
6
7
8
9
|
docker run -d -p 80:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \ #卷映射
--restart always --name wordpress-app \
--network blog \
wordpress
|
创建一键脚本
compose.yam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#创建应用的名
name:myblog
services:
#应用名称 使用该名称可以单独只启动这个[NAME]
mysql:
#容器名称
container_name: mysql
#镜像
image: mysql[:8.0]
portes:
- "3306:3306"
#环境变量
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
#卷挂载 / 映射
volumes:
- mysql-data:/var/lib/mysql
- /app/myconf:/etc/mysql/conf.d
#重启策略
restart: always
#网络
networks:
- blog
wordpress:
container_name: wordpress
image: wordpress
portes:
- "8888:80"
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456
- WORDPRESS_DB_NAME=wordpress
volumes:
- wordpress:/var/www/html
restart: always
networks:
- blog
#依赖
depends_on:
- mysql[NAME]
#上面的卷只需要在这里出现就行了
volumes:
mysql-data:
wordpress:
networks:
blog:
|
删除先前的全部
1
2
3
4
5
|
docker rm -f $(docker ps -aq)
docker volume ls
docker volume rm xxx xxx
docker network ls
docker network rm xx
|
启动
1
|
docker compose -f compose.yaml up -d
|
1
2
|
#彻底删除
docker compose -f compose.yaml down --rmi all -v
|
Docker DockerFile
自建镜像
DockerFile + app.jar => Builder
镜像中应该包含全部的运行环境
| 常见指令 |
作用 |
| FROM |
指定镜像基础环境 |
| RUN |
运行自定义命令 |
| CMD |
容器启动命令或参数 |
| LABEL |
自定义标签 |
| EXPOSE |
指定暴露端口 |
| ENV |
环境变量 |
| ADD |
添加文件到镜像 |
| COPY |
复制文件到镜像 |
| ENTRYPOINT |
容器固定启动命令 |
| VOLUME |
数据卷 |
| USER |
指定用户和用户组 |
| WORKDIR |
指定默认工作目录 |
| ARG |
指定构建参数 |
1
2
3
4
5
6
7
8
9
|
FROM openjdk:17
LABEL author=作者
COPY app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["javr","-jar","/app.jar"]
|