Docker基础总结篇

1、Docker

1、安装

1、基本组成

在这里插入图片描述

镜像(image)

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务。

容器(contanier)

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

仓库(repository)

仓库就是存放镜像的地方

2、安装

1、卸载旧版本

yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine

2、需要的安装包

yum install -y yum-utils

3、更新yum软件索引

yum makecache fast

4、设置镜像的仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、安装docker

yum install docker-ce docker-ce-cli containerd.io

6、启动docker

systemctl start docker

7、查看是否安装成功

docker version

8、运行hello-world

docker run hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fs0GU1EW-1678275044920)(img/image-20230220211858932.png)]

9、查看hello-world镜像

docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAwKBqLB-1678275044921)(img/image-20230220212059135.png)]

10、卸载docker

1、卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2、删除资源
rm -rf /var/lib/docker

11、默认工作路径

/usr/lib/docker

3、阿里云加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ht2we6t8.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

2、Docker常用命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYwyaJX7-1678275044922)(img/2075421-20201113081231842-133614290.png)]

1、镜像命令

docker images

列出本地镜像。

[root@VM-4-16-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   17 months ago   13.3kB


#
REPOSITORY  镜像的仓库
TAG			镜像的标签
IMAGE ID	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

# 可选项
Options:
  -a, --all             Show all images (default hides intermediate images)

  -q, --quiet           Only show image IDs
docker search

从Docker Hub查找镜像

[root@VM-4-16-centos ~]# docker search mysql
NAME                            DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13833     
mariadb                         MariaDB Server is a high performing open sou…   5276     
percona                         Percona Server is a fork of the MySQL relati…   599       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   741       
circleci/mysql                  MySQL is a widely used, open-source relation…   28  

# 可选项
 --filter=STARs=3000   列出收藏数不小于指定值的镜像。
 
 [root@VM-4-16-centos ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   13833     [OK]       
mariadb   MariaDB Server is a high performing open sou…   5276      [OK] 
docker pull

从镜像仓库中拉取或者更新指定镜像

[root@VM-4-16-centos ~]# docker pull mysql
Using default tag: latest   #不指定tag默认最新版本
latest: Pulling from library/mysql
72a69066d2fe: Pull complete  # 分层下载
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709  #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  #真是下载地址


## 指定版本下载
[root@VM-4-16-centos ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists 
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi

删除镜像

 docker rmi -f 镜像ID   # 删除指定的容器
 docker rmi -f 镜像ID 镜像ID 镜像ID   # 删除多个容器
 docker rmi -f $(docker images -aq)    # 删除全部容器

2、容器命令

有了镜像才可以创建容器

docker pull centos

新建容器并启动
docker run [可选参数] image

#参数
--name="Name"   容器名字
-d  			后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p  			指定容器的端口
		-p 主机端口:容器端口


# 测试,启动并进入容器
[root@VM-4-16-centos ~]# docker run -it centos /bin/bash
[root@1e4d93b06655 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1e4d93b06655 /]# exit   # 退出容器
exit

列出所有运行的容器
#docker ps 
	#列出当前正在运行的容器
-a  # 列出当前正在运行的容器+历史运行的容器
-n=?  #显示最近创建的容器
-q   # 只显示容器编号

[root@VM-4-16-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@VM-4-16-centos ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS                          PORTS     NAMES
1e4d93b06655   centos         "/bin/bash"   About a minute ago   Exited (0) About a minute ago             compassionate_blackwell
7d3f2807d5d2   feb5d9fea6a5   "/hello"      18 hours ago         Exited (0) 18 hours ago                   charming_mayer

[root@VM-4-16-centos ~]# docker ps -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
1e4d93b06655   centos    "/bin/bash"   3 minutes ago   Exited (0) 2 minutes ago             compassionate_blackwell

退出容器
exit    直接退出
Ctrl + P + Q   容器不停止退出
删除容器
docker rm 容器id   # 删除指定容器,不能删除正在运行的   如要 rm -f
docker rm -f $(docker ps -aq)
启动与停止
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDKs4yHD-1678275044923)(img/image-20230221161603521.png)]  v

3、常用其他命令

后台启动容器
[root@VM-4-16-centos ~]# docker run -d centos


# 问题docker ps ,发现centos自己停了

# 坑:容器使用后台运行,就必须要有一个前台进程,docker发现没应用,就会停止
查看日志
docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f : 跟踪日志输出
  • **–since 😗*显示某个开始时间的所有日志
  • -t : 显示时间戳
  • **–tail 😗*仅列出最新N条容器日志
查看容器进程信息
[root@VM-4-16-centos ~]# docker top 82dd28fa2d2a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                10932               10911               0                   15:08               pts/0               00:00:00            /bin/bash

查看镜像的元数据
docker inspect 82dd28fa2d2a
进入运行中的容器
# 进入容器后开启一个新的终端,可以操作
docker exec -it 82dd28fa2d2a /bin/bash

# 进入容器正在执行的终端,不会启动新的进程
docker attach 82dd28fa2d2a
数据拷贝

用于容器与主机之间的数据拷贝。

# 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/

#将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。 (先进入容器)
docker cp  96f7f14e99ab:/www /tmp/

4、卷命令

[root@VM-4-16-centos ~]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

3、案列

nginx
# 1、搜索search
# 2、拉取 pull
[root@VM-4-16-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   13 months ago   141MB
centos       latest    5d0da3dc9764   17 months ago   231MB


# -d 后台运行
# --name 取名
# -p 宿主机端口:容器内部端口

[root@VM-4-16-centos ~]# docker run -d --name nginx01 -p 5566:80 nginx
17c6ab028d7db5f067a2ed11da5c6f7d34297bae4b3794df2eb992527a8241c7
[root@VM-4-16-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                                   NAMES
17c6ab028d7d   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 2 seconds   0.0.0.0:5566->80/tcp, :::5566->80/tcp   nginx01

[root@VM-4-16-centos ~]# curl localhost:5566

4、数据卷

数据卷是宿主机中的一个目录或文件。
当容器目录和数据卷目录绑定后,对方的修改会立即同步。
一个数据卷可以被多个数据卷挂载
一个容器可以挂载多个数据卷
作用:
容器数据持久化;外部机器和容器间接通信;容器之间数据交换。

命令挂载

 docker run -it -v /home/ceshi:/home centos /bin/bash
					主机目录:容器目录
 
 #使用inspect 查看详情
 docker inspect 5fa219d39c99

 "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

实战:Mysql

数据持久化

# 拉取镜像
docker pull mysql:5.7

# 需要配置密码,官方文档提供
# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

docker run -d -p 6000:3306 -v /home/mysql/conf:/etc/home/config.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=p123456 --name mysql01 mysql:5.7



####将容器删除
[root@VM-4-16-centos ~]# docker rm -f mysql01
mysql01
[root@VM-4-16-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-4-16-centos ~]# docker ps -aq

会发现:挂载在本地的数据卷没有丢失,这就实现了容器数据持久化功能。

具名挂载

 docker run -d -p 6001:80 --name nginx02 -v juming-nginx:/etc/nginx nginx
 
 [root@VM-4-16-centos ~]# docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx
[root@VM-4-16-centos ~]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2023-02-25T11:18:25+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有docker容器内的卷,没有指定目录都是在/var/lib/docker/volumes/xxx/_data下

权限

# 通过 -v 容器内路径:ro rw改变读写权限
ro readonly #只读
rw readwirte #可读可写

docker run -d -p 6001:6379 --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -p 6001:6379 --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

# 只要看到ro就说明这个路径只能在宿主机操作,容器内部无法操作

5、DockerFIle

javaweb

自定义镜像

1、在/tmp目录创建docker-demo文件夹

2、上传demo.jar包到/tmp/docker-demo

3、编写Dockerfile文件

# 指定基础镜像
FROM java:8-alpine

COPY ./demo.jar /tem/app.jar
#暴露端口
EXPOSE 6002
# 入口
ENTRYPOINT java -jar /tem/app.jar

4、构建镜像

docker build -t javaweb:1.0 .

5、查看镜像是否创建

[root@VM-4-16-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
javaweb      1.0       85b99088869a   18 minutes ago   162MB

6、启动镜像

docker run --name web -p 6002:6002 -d javaweb:1.0

javaweb

自定义镜像

1、在/tmp目录创建docker-demo文件夹

2、上传demo.jar包到/tmp/docker-demo

3、编写Dockerfile文件

# 指定基础镜像
FROM java:8-alpine

COPY ./demo.jar /tem/app.jar
#暴露端口
EXPOSE 6002
# 入口
ENTRYPOINT java -jar /tem/app.jar

4、构建镜像

docker build -t javaweb:1.0 .

5、查看镜像是否创建

[root@VM-4-16-centos ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
javaweb      1.0       85b99088869a   18 minutes ago   162MB

6、启动镜像

docker run --name web -p 6002:6002 -d javaweb:1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值