容器(docker)安装docker

举报
Gere 发表于 2022/08/07 19:30:27 2022/08/07
【摘要】 文章目录Docker认识Windows安装阿里云镜像配置Docker 安装软件redisDocker安装wordpressDocker的常用命令帮助命令镜像命令docker images 查看所有本地的主机上的镜像docker search 搜索镜像docker pull 下载镜像docker rmi 删除镜像容器命令新建容器并启动列出所有运行的容器退出容器删除容器启动和停止容器的操作其他常...


Docker认识

官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/

Windows安装

桌面版安装地址:
https://www.docker.com/products/docker-desktop

替换源地址:
https://registry.docker-cn.com

添加: “registry-mirrors”:[“https://registry.docker-cn.com”,“https://docker.mirrors.ustc.edu.cn”],

可以在/etc/docker/daemon.json中配置,也可以在docker.service中修改,效果一样。
在这里插入图片描述

修改镜像路径到d盘:
参考文档:https://blog.csdn.net/u013948858/article/details/111464534
默认存储路径:
在这里插入图片描述

wsl --export docker-desktop-data "D:\\docker-desktop-data.tar"
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data "D:\\docker\\wsl" "D:\\docker-desktop-data.tar" --version 2

在这里插入图片描述

注意1:
双击打开显示,docker desktop stopped:
解决方法: C:\Users<username>\AppData\Roaming\Docker\settings.json, and set “wslEngineEnabled”: true

注意2:
默认安装是在C盘,比较占用空间。
在安装之前,创建到D盘里:
管理员运行cmd命令:

mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"

阿里云镜像配置

在这里插入图片描述

Docker 安装软件redis

Docker 官方镜像仓库查找 Redis :https://hub.docker.com/

本地命令行输入:

docker run -d -p 6379:6379 --name redis redis:latest

在这里插入图片描述
安装结束之后,在docker desktop里面就可以看到redis:
在这里插入图片描述
点击进去可以看到,当前redis的log日志、inspect版本和端口、stats占用内存等。
在这里插入图片描述
进入redis的终端:
在这里插入图片描述

docker命令参考:https://docs.docker.com/engine/reference/commandline/run/

Docker安装wordpress

在这里插入图片描述
拷贝到文件:docker-compose.yml
powershell运行安装:

docker-compose up -d

在这里插入图片描述
安装结束后,docker窗口查看
在这里插入图片描述
浏览器查看:
在这里插入图片描述

Docker的常用命令

帮助命令

docker version    # 显示docker的版本信息
docker info       #  显示docker的系统信息,包括镜像和容器的数量
docker --help     #  帮助命令

在这里插入图片描述

帮助文档地址:https://docs.docker.com/engine/reference/commandline

镜像命令

docker images 查看所有本地的主机上的镜像

在这里插入图片描述
解释:
REPOSITORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像id
CREATED 镜像的创建时间
SIZE 镜像的大小

 docker images --help

在这里插入图片描述
可选项:
-a, --all 列出所有的镜像
-q, --quiet 只显示镜像ID

docker search 搜索镜像

在这里插入图片描述

docker search --help

可选项:
通过收藏来过滤
–filter=STARS=100 # 搜索出来的镜像 收藏数量大于100
在这里插入图片描述

docker pull 下载镜像

docker pull 镜像名称 [:tag]

docker pull mysql      # 不指定版本 下载最新的
docker pull mysql:5.7  # 指定版本下载 官网要有的

在这里插入图片描述

docker rmi 删除镜像

在这里插入图片描述

官网地址:https://docs.docker.com/engine/reference/commandline/images/

容器命令

有了镜像才可以新建容器,下载一个centos镜像来学习
在这里插入图片描述

新建容器并启动

docker run -it centos /bin/bash
映射外路径启动docker run -v D:\A_Project\docker\centos:/home --name centos  -it centos

在这里插入图片描述
在这里插入图片描述

列出所有运行的容器

 docker ps -a  # 查看当前所有容器
 docker ps     # 查看正在运行的容器
 docker ps -a -n=1  # 列出最新创建的容器 n为个数

在这里插入图片描述

退出容器

exit                # 直接退出容器
ctrl +P+Q      # 容器不停止退出

删除容器

docker rm 容器id                # 删除指定id的容器
docker rm -f $(docker ps -aq)  # 删除所有的容器

启动和停止容器的操作

docker start 容器id       # 启动容器
docker restart  容器id    # 重启容器
docker stop 容器id        # 停止当前正在运行的容器
docker kill 容器id        # 强制停止当前容器

其他常用命令

查看日志

# docker logs -f -t --tail 最后条数 容器ID
docker logs -f -t --tail 100 5bf2312ac02f  # 显示最后100条日志
docker logs -tf  # 显示全部日志

查看容器进程信息ps

# docker top 容器ID
PS C:\Users\taohy> docker top 5bf2312ac02f
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1667                1646                0   

查看镜像的元数据

docker inspect 容器ID
在这里插入图片描述

在这里插入图片描述

进入当前正在运行的容器

# 我们的容器通常是使用后台运行的方式,需要进入容器,修改一些配置。
# 命令
docker exec -it 容器ID /bin/bash

在这里插入图片描述

在进入容器之后,输入命令:

apt-get update

# 安装vim命令
apt-get install vim

# 安装ifconfig命令
apt-get install net-tools

# 安装ping命令
apt-get install iputils-ping

从容器内拷贝文件到主机上

# 命令 docker cp 容器ID:容器内路径 目的的主机路径
PS C:\Users\taohy> docker cp 53359cb5303a:/home/test.py d:/

# 上面实现的是将 容器内部的/home/test.py 拷贝到主机D盘

# 拷贝是一个手动过程,未来我们使用-v卷的技术

小结

在这里插入图片描述

作业

部署Nginx

1. 搜索镜像  # 建议官网docker hub搜索
2. 下载镜像  # pull

# -d 后台运行
# --name 给容器命名
# -p 主机端口:容器内部端口
4. 启动镜像  
docker run -d --name nginx01 -p 1314:80 nginx
5. 运行测试
curl http://localhost:1314
6. 进入容器
docker exec -it 42661a9e38d9 /bin/bash
7. 查看路径
whereis nginx

思考问题:我们每次改动nginx配置见,都需要进入容器内部?十分麻烦,如何在主机修改文件,容器内部就直接修改?-v 数据卷!

搜索镜像:在这里插入图片描述
启动镜像:
在这里插入图片描述
运行测试:
在这里插入图片描述

部署Tomcat

# docker 运行
docker run -it --rm -p 1314:8080 tomcat:9.0
# 访问网址 阉割版
http://localhost:1314/
# 进入容器,拷贝文件到webapps
 cp -r webapps.dist/* webapps
 # 访问网址
 http://localhost:1314/

访问网址,阉割版:
在这里插入图片描述

在这里插入图片描述

commit 镜像

docker commit 提交容器成为一个新的版本

# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

docker commit -m="add webapps" -a="taohy" 3c070f4da805 tomcat_taohy:1.0

实战测试

# 1. 启动一个默认的tomcat
# 2. 发现这个默认的tomcat是没有webapps应用,官方镜像默认webapps下面是没有文件的!
# 3. 我自己拷贝进去了基本的文件
# 4. 将我们操作过的容器通过commit提交为一个镜像!我们以后就使用我们改过的镜像即可,这就是我们自己的一个修改镜像。

用docker images命令查看新增的镜像:
在这里插入图片描述

Docker数据卷

卷技术,实际就是将容器内的目录,挂在到主机上。
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的。

使用数据卷

方式一:命令行 -v
docker run -it -v 主机目录:容器目录

实战:安装Mysql

思考:mysql的数据持久化问题

# 搜索
docker search mysql
# 拉取
docker pull mysql:5.7
# 查看镜像
docker images
# 启动 运行容器 需要挂在容器 配置密码
# 官网 $ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

-d 后台运行
-p 端口映射
-v 卷挂载 多个对应多个-v
-e 环境配置
--name 容器名字
docker run -d -p 33061:3306 -v D:\docker\mnt\mysql\conf:/etc/conf.d -v D:\docker\mnt\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

主机工具测试mysql连接:
在这里插入图片描述

在这里插入图片描述
主机文件映射位置:
在这里插入图片描述
容器内部文件和外机映射文件比对:(任何一端编辑之后,都会同步进行)
在这里插入图片描述
假设我们将容器删除,发现,我们挂在到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。

具名和匿名挂载

匿名挂载:
-v 容器内路径 不指定容器外路径
在这里插入图片描述

具名挂载:
在这里插入图片描述
如何区分匿名挂载和具名挂载:

-v 容器内路径         # 匿名挂载
-v 卷名:容器内路径     # 具名挂载
-v /主机路径:容器内路径 # 指定路径挂载

在这里插入图片描述

初识DockerFile

DockerFile就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层。
在这里插入图片描述

数据卷容器

多个mysql实现数据共享

# mysql docker01
docker run -d -p 33061:3306 -v D:\docker\mnt\mysql\conf:/etc/conf.d -v D:\docker\mnt\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

# mysql docker02
# 通过--volumes-form mysql01实现数据同步
docker run -d -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:5.7

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用。
但是一旦你持久化到了本地,这时候,本地的数据是不会删除的。

DockerFile

构建步骤:

  1. 编写一个dockerfile文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub 阿里云镜像)

以centos为例,在docker hub上查看:
在这里插入图片描述
点击版本信息,跳转到github的dockerfile:
在这里插入图片描述
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!

DockerFile的构建过程

基础知识:
  1. 每个保留关键字(指令)都是必须大写字母
  2. 执行从上到下顺序执行
  3. 表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!
    在这里插入图片描述
    Dockerfile的步骤:
    DockerFile:构建文件,定义一切的步骤,源代码
    DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
    Docker容器:容器就是镜像运行起来提供的服务器
DockerFile的指令
FROM       # 基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN        # 镜像构建的时候需要运行的命令
ADD        # 步骤,tomcat镜像,这是tomacat压缩包!添加内容
WORKDIR    # 镜像的工作目录 
VOLUME     # 挂载的目录
EXPOSE     # 保留端口配置
CMD        # 指定这个容器启动的时候要运行的命令
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD    # 当构建一个被继承 Dockerfile,这个时候就会运行onbuild
COPY       # 类似add,将我们文件拷贝到镜像中
ENV        # 构建的时候设置环境变量

在这里插入图片描述

实战测试

DockerHub中99%的镜像都是从基础镜像过来的From scratch,然后配置需要的软件和配置。
在这里插入图片描述

# 创建一个自己的镜像
新建文件mydockerfile-centos

# build镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .

# docker history imagesID
我们平时查看镜像是如何做的,通过上面的命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布自己的镜像
DockerHub
1. 官网注册自己的账号
2. 确定这个账号可以登录
docker login -u 用户名
输入密码进入
3. 在我们服务器上提交自己的镜像
docker push taohy/
4. 登录完就可以提交镜像

登录账号:
在这里插入图片描述
在这里插入图片描述

在阿里云发布镜像
  1. 登录阿里云
  2. 找到容器镜像服务
  3. 创建命名空间
    在这里插入图片描述
  4. 创建容器镜像
    新建阿里云镜像仓库地址:
    在这里插入图片描述
  5. 浏览镜像仓库信息
    在这里插入图片描述
小结

在这里插入图片描述

Docker网络

网络详解

# 进入容器
PS C:\Users\taohy> docker exec -it  98da3ab14625 /bin/bash
# 查看容器的内部网络IP地址 172.17.0.3
root@98da3ab14625:/usr/local/bin/ignition# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 16  bytes 1072 (1.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 602 (602.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1394  bytes 354097 (354.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1394  bytes 354097 (354.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 再启动一个容器,查看ip地址 172.17.0.2 
root@801e60036d61:/usr/local/bin/ignition# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 472  bytes 373438 (373.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 430  bytes 33381 (33.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 708  bytes 173243 (173.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 708  bytes 173243 (173.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 思考,外机能否ping通主机容器内部?
Linux能ping通
winodws不能ping通

# 容器如何访问到Windows?
容器访问外机,默认的要用host.docker.internal

# 容器之间能互相通吗? 可以通 容器内:172.17.0.2 ping 172.17.0.3
root@801e60036d61:/usr/local/bin/ignition# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.052 ms

# 查看网络命令 docker network --help 
PS C:\Users\taohy> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
075fff009f22   bridge    bridge    local
efbaf94573b8   host      host      local
29125732f2e0   none      null      local

# 查看网络具体信息
 docker network inspect 075fff009f22

在这里插入图片描述
在这里插入图片描述

# inspect 是查看具体信息,非常有用,不管是查看容器内部还是容器网络
docker inspect 容器ID
docker network inspect 网络ID

自定义网络

查看所有的docker网络

PS C:\Users\taohy> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
075fff009f22   bridge    bridge    local
efbaf94573b8   host      host      local
29125732f2e0   none      null      local
网络模式

bridge :桥接 docker(默认,如果自己创建也用bridge)
none:不配置网络(用的少)
host:和主机共享网络
container:容器网络连接(用的少)

网络测试
# 创建自定义的网络bridge:
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 创建之后查看网络,mynet
PS C:\Users\taohy> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
075fff009f22   bridge    bridge    local
efbaf94573b8   host      host      local
6c3a287738b3   mynet     bridge    local
29125732f2e0   none      null      local


在这里插入图片描述

# 启动容器放在自定义网络 --net 
docker  run -d -P --name tomcat-net-01 --net mynet tomcat

在这里插入图片描述

网络连通

容器连接到一个网络:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
结论:
假设要跨网络操作别人,就需要使用docker network connect 连通!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。