docker——入个门

安装Docker

学习一门新的技术,最好的办法就是通过官方文档学习 Docker安装官方文档

首先通过Xshell连接远程服务器,就可以再上面展开操作了

安装步骤

  1. 移除服务器上原有的Docker

    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-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo  #这里官方给的地址是外网地址,不建议使用
        
    yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #建议使用阿里云镜像仓库
    
  4. 更新yum软件包索引

    yum makecache fast
    
  5. 安装docker相关引擎,docker-ce社区版,docker-ce-cli企业版

    yum install docker-ce docker-ce-cli containerd.io
    
  6. 启动docker,一路y下去即可

    systemctl start docker
    
  7. 测试一下hello-world语句

    执行这个语句首先会查找有没有镜像,当然我们是第一次部署服务器不存在镜像,然后他会去之前设置的镜像仓库中拉去镜像,和git非常相像

    docker run hello-world
    

    在这里插入图片描述

其他命令

  • 查看已安装的镜像

    docker images
    

    在这里插入图片描述

  • 卸载docker

    # 卸载docker引擎等,但不会卸载镜像、容器...
    yum remove docker-ce docker-ce-cli containerd.io
    # 卸载相关配置文件,如镜像、容器
    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    

阿里云镜像加速器

配置阿里云镜像加速器,可以使得下载容器速度更快

访问以下链接获取阿里云镜像加速器 点击跳转

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

dockers常用命令

帮助命令

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

更多帮助命令可以访问官网 docker帮助命令

镜像命令

docker images:查找本地主机上所有已安装的镜像

[root@izbp1bc82otjd8cslsu9zsz ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
# REPOSITORY  镜像名称
# TAG 镜像版本  latest为最新版本
# IMAGE ID 镜像ID
# CREATED 创建时间
# SIZE 镜像大小

# 可选项
docker images -a # 获取所有镜像
docker images -q # 显示所有镜像的ID

docker search:搜索镜像

[root@izbp1bc82otjd8cslsu9zsz ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11788     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4487

docker pull:下载镜像

还是拿mysql举例

[root@izbp1bc82otjd8cslsu9zsz ~]# docker pull mysql
Using default tag: latest   # 下载最新版本的mysql,默认是latest
latest: Pulling from library/mysql
ffbb094f4f9e: Pull complete  # 分层下载
df186527fc46: Pull complete 
fa362a6aa7bd: Pull complete 
5af7cb1a200e: Pull complete 
949da226cc6d: Pull complete 
bce007079ee9: Pull complete 
eab9f076e5a3: Pull complete 
8a57a7529e8d: Pull complete 
b1ccc6ed6fc7: Pull complete 
b4af75e64169: Pull complete 
3aed6a9cd681: Pull complete 
23390142f76f: Pull complete 
Digest: sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 也可以使用指定版本号的方式下载 docker pull mysql:版本号
[root@izbp1bc82otjd8cslsu9zsz ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
ffbb094f4f9e: Already exists  # 这里可以看到分层下载的好处,最新版本的mysql和5.7版本的mysql有相同文件就不需要重复下载两边,极大的节省了空间
df186527fc46: Already exists 
fa362a6aa7bd: Already exists 
5af7cb1a200e: Already exists 
949da226cc6d: Already exists 
bce007079ee9: Already exists 
eab9f076e5a3: Already exists 
c7b24c3f27af: Pull complete 
6fc26ff6705a: Pull complete 
bec5cdb5e7f7: Pull complete 
6c1cb25f7525: Pull complete 
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi:删除镜像

docker rmi -f 镜像ID  # 删除指定id的镜像
docker rmi -f 镜像ID 镜像ID 镜像ID # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除所有镜像
[root@izbp1bc82otjd8cslsu9zsz ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         5.7       738e7101490b   3 days ago     448MB
mysql         latest    bbf6571db497   3 days ago     516MB
hello-world   latest    feb5d9fea6a5   2 months ago   13.3kB
[root@izbp1bc82otjd8cslsu9zsz ~]# docker rmi -f 738e7101490b
Untagged: mysql:5.7
Untagged: mysql@sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Deleted: sha256:738e7101490b45decf606211a5437ed87aa6a82f1ff03c354564bf9375ce20f9
Deleted: sha256:addad8cfeac97b96eb6652a576269346ac96def9a6709ed2388e24fff4345837
Deleted: sha256:e288c3439a7e2f423f50bf22979a759371c51a70bbbaa450993c336978460b1a
Deleted: sha256:33ece15accaa3bb20e3dee84e2e4501469b917c3abba3d5475cd1fec8bb3e82c
Deleted: sha256:6b15390bceeca8424d82e75f5c9aca5eb4693f96849d6382168a99747877693d

[root@izbp1bc82otjd8cslsu9zsz ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:latest
Untagged: mysql@sha256:ff9a288d1ecf4397967989b5d1ec269f7d9042a46fc8bc2c3ae35458c1a26727
Deleted: sha256:bbf6571db4977fe13c3f4e6289c1409fc6f98c2899eabad39bfe07cad8f64f67
Deleted: sha256:a72da99dce60d6f8d4c4cffa4173153c990537fcdfaa27c35324c3348d55dd5c
Deleted: sha256:8b535d432ef2fbd45d93958347b2587c5cbe334f07d6909ad9d2d480ebbafb65
Deleted: sha256:14d13a3b33fc76839f156cd24b4636dab121e6d3d026cefa2985a4b89e9d4df8
Deleted: sha256:77c21a5a897a1ba752f3d742d6c94ee7c6b0e373fd0aeecc4bf88b9a3982007e
Deleted: sha256:189162becec8bb4588c54fb4ea7e62d20121812e68aeb0291fb4bb5df9ec0985
Deleted: sha256:34980dadfd6a5bb9d7f9e8d4e408000e0a8f4840cc7d3092dc94357ebe7a89b6
Deleted: sha256:15b2beb64a91785c8f3709ecd2410d13577b3174faad164524434ce6a7633506
Deleted: sha256:e38dd14d47b61171927ea4b928f7296123b65a81ad1cfde8f5d00cadf1e81bbb
Deleted: sha256:865abdfd8444741f581ce582e4ac5746c4a00c282febf65aa808a235ec7abf78
Deleted: sha256:b1e35233e1ac953bd06fc8fa83afb3a88c39c1aeae0c89a46cb1b652d6821b38
Deleted: sha256:3bcfdf6641227ff63e3ddf9e38e45cf317b178a50a664e45c6ae596107d5bc46
Deleted: sha256:f11bbd657c82c45cc25b0533ce72f193880b630352cc763ed0c045c808ff9ae1
Untagged: hello-world:latest
Untagged: hello-world@sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412

容器命令

有了镜像我们才可以创建容器,如何理解容器和镜像的关系呢?

小黄个人是这么理解的:举个比较形象的例子,在电脑中,我们需要运行IDEA,第一步是需要安装IDEA,那么这个IDEA我们可以将他看成一个镜像,安装完IDEA之后,才可以运行IDEA,运行IDEA这个过程我们可以将他看为一个容器,一台电脑中当然可以运行多个IDEA,所以我们的服务器上也可以运行多个容器

新建容器并启动

docker run [可选项] image
# 可选项说明
--name="Name"  # 为容器起一个别名
-d # 后台方式运行
-it # 使用交互方式运行,进入容器可查看内容
-p(小写) # 指定容器的端口 如: -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
-P(大写) # 随机指定容器的端口

# 测试 运行并进入容器(可以看到root@后面的id有所变化) # docker run -it centos /bin/bash
[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -it centos /bin/bash
[root@92bfbca98f27 /]# ls  # 查看容器内的centos,很多命令是不完善的
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 退出容器
[root@92bfbca98f27 /]# exit
exit


列出所有运行的容器

docker ps
# 可选项# 列出当前正在运行的容器
-a # 列出当前正在运行的容器以及历史运行过的容器
-n=? # 显示最近创建的容器  ?为整数
-q # 只显示容器编号
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
92bfbca98f27   centos         "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             recursing_sammet
cfebeadfa0fc   centos         "/bin/bash"   5 minutes ago   Exited (127) 4 minutes ago                cool_cartwright
0d7cee725bfc   feb5d9fea6a5   "/hello"      25 hours ago    Exited (0) 25 hours ago                   affectionate_blackburn
6116f9e0474a   feb5d9fea6a5   "/hello"      2 days ago      Exited (0) 2 days ago                     determined_bohr

[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
92bfbca98f27   centos    "/bin/bash"   5 minutes ago   Exited (0) 3 minutes ago             recursing_sammet
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps -n=2
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                       PORTS     NAMES
92bfbca98f27   centos    "/bin/bash"   5 minutes ago   Exited (0) 3 minutes ago               recursing_sammet
cfebeadfa0fc   centos    "/bin/bash"   7 minutes ago   Exited (127) 7 minutes ago             cool_cartwright

退出容器

exit # 退出并且关闭容器
Ctrl + P + Q # 退出容器但不关闭容器 注意必须在开启大写的情况下有效
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -it centos /bin/bash
[root@1e14ac439898 /]# [root@izbp1bc82otjd8cslsu9zsz ~]# docker ps -a
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
1e14ac439898   centos    "/bin/bash"   48 seconds ago   Up 47 seconds             nostalgic_lumiere

删除容器

docker rm 容器ID # 删除指定容器,当这个容器正在运行时,无法删除
docker rm -f 容器ID # 强制删除指定容器,无论是否在运行
docker rm -f $(docker ps -aq) # 删除所有容器
[root@izbp1bc82otjd8cslsu9zsz ~]# docker rm 1e14ac439898
Error response from daemon: You cannot remove a running container 1e14ac4398982f19e187fa0deeff8fb765f96230c3640be11bd05fffc3a93a83. Stop the container before attempting removal or force remove

启动和停止容器

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

[root@izbp1bc82otjd8cslsu9zsz ~]# docker start cfebeadfa0fc
cfebeadfa0fc
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
cfebeadfa0fc   centos    "/bin/bash"   16 minutes ago   Up 6 seconds             cool_cartwright
[root@izbp1bc82otjd8cslsu9zsz ~]# docker stop cfebeadfa0fc
cfebeadfa0fc
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

其他常用命令

后台启动容器

docker run -d 容器 # 执行之后会判断是否有需要执行的操作,如果没有的话会关闭容器
[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -d centos
c3f6165d659ab262cf57cef57b53ba96672586597d603a69eeec081e852071fc
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# 为服务器绑定操作,就不会自动关闭
[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -d centos /bin/sh -c "while true;do echo yellowstar;sleep 1;done;"
2d83699d124e265fabe44c62ce175a38b9d159f6661e1904710107f05d81ebe9
[root@izbp1bc82otjd8cslsu9zsz ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
2d83699d124e   centos    "/bin/sh -c 'while t…"   6 seconds ago   Up 5 seconds             fervent_austin

查看容器日志

docker logs [可选项] 容器ID # 先来看一下帮助文档
[root@izbp1bc82otjd8cslsu9zsz ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output   # 显示日志信息
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative
                       (e.g. 42m for 42 minutes)
      # --tail number 显示number条日志信息
  -n, --tail string    Number of lines to show from the end of the logs (default "all") 
  -t, --timestamps     Show timestamps # 显示日志信息带有时间戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or
                       relative (e.g. 42m for 42 minutes)

# 比如我想查看2d83699d124e的最新10条日志信息,执行以下操作就会显示需要的数据,并且接着输出新的日志
docker logs -f -t -tail 10 2d83699d124e

查看容器中正在进行的进程信息

docker top 容器ID
[root@izbp1bc82otjd8cslsu9zsz ~]# docker top 2d83699d124e
UID                 PID                 PPID                C                   STIME               TTY  
root                25299               25255               0                   14:15               ?     
root                28326               25299               0                   14:36               ?      

查看容器的元数据

docker inspect 容器ID

进入当前正在运行的容器

# 方式一
# docker exec 容器ID bashshell
[root@izbp1bc82otjd8cslsu9zsz ~]# docker exec -it 2d83699d124e /bin/bash
[root@2d83699d124e /]# 

# 方式二
# docker attach 容器ID
[root@izbp1bc82otjd8cslsu9zsz ~]# docker attach 2d83699d124e
yellowstar
yellowstar
yellowstar
# 因为这个容器写了一个死循环,一直打印

# docker exec : 进入容器后,开启一个新的终端,可以在里面操作(常用)
# docker attach : 进入容器正在执行的终端,不会启动新的进程

从容器中拷贝文件到主机

# docker ps 容器ID:被拷贝的文件路径 拷贝到的地址路径
[root@izbp1bc82otjd8cslsu9zsz /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
b51bb7e84cf9   centos    "/bin/bash"   5 minutes ago   Up 5 minutes             angry_carver
[root@izbp1bc82otjd8cslsu9zsz /]# docker exec -it b51bb7e84cf9 /bin/bash
[root@b51bb7e84cf9 /]# ls     
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr  yellowstar.java
[root@b51bb7e84cf9 /]# touch test.java  # 创建test.java 
[root@b51bb7e84cf9 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  test.java  usr  yellowstar.java
dev  home  lib64  media       opt  root  sbin  sys  tmp        var
[root@b51bb7e84cf9 /]# exit
exit
# 将容器根目录中的test.java文件拷贝到主机中的home路径下
[root@izbp1bc82otjd8cslsu9zsz /]# docker cp b51bb7e84cf9:/test.java /home 
[root@izbp1bc82otjd8cslsu9zsz /]# cd /home
[root@izbp1bc82otjd8cslsu9zsz home]# ls
admin  staragent  test.java  www  yellowstar.java

docker安装软件

通过以上的学习,我们来安装一些常用软件检测一下学习成果,只有不断地敲代码才能理解,不可以光说不做

安装nginx

先来回顾一下安装软件的步骤

  1. 在docker hub上搜索软件
  2. 通过docker pull 下载镜像
  3. 使用run命令运行
# docker search nginx 搜索软件,个人建议还是去docker hub上搜索,可以看到一些帮助文档
# docker pull nginx 下载镜像
# docker run --name nginx01 -d -p 3344:80 nginx 后台运行nginx,并为他映射外部的端口号为3344

nginx使用的是80端口,而一个容器相当于一个小的linux系统,与外界是独立开来的,所以我们需要将容器中的80端口映射到服务器中的3344端口(可以自己随意取)

除了映射端口之外,我们还需要开放阿里云服务器的防火墙,暴露我们的3344端口才可以被公网访问

在这里插入图片描述

我们现在访问121.40.45.37:3344即可访问到nginx的主页在这里插入图片描述

安装tomcat

安装启动跟nginx一样,映射到3355的端口

# docker search tomcat
# docker pull tomcat
# docker run -d -p 3355:8080 --name tomcat01 tomcat

我们尝试访问ip:3355,发现找不到页面

在这里插入图片描述

# 进入tomcat的安装目录,我们发现webapps文件夹是空的,所以我们访问不到页面
[root@izbp1bc82otjd8cslsu9zsz ~]# docker exec -it 70a6d4bd78e1 /bin/bash
root@70a6d4bd78e1:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@70a6d4bd78e1:/usr/local/tomcat# cd webapps
root@70a6d4bd78e1:/usr/local/tomcat/webapps# ls
root@70a6d4bd78e1:/usr/local/tomcat/webapps# 
# 我们需要将webapps.dist中的文件全部拷贝到webapps中
root@70a6d4bd78e1:/usr/local/tomcat/webapps# cd ..
root@70a6d4bd78e1:/usr/local/tomcat# cp -r webapps.dist/* webapps

这时候我们再来访问页面

在这里插入图片描述

安装ES

es小黄还没使用过,本来想着就不写了的,听着狂神老师的视频,也有所了解,具体我就不测试了,把需要注意的地方写出来供大家参考

因为ES非常占用内存,买来测试的服务器要么就是1核2G要么就是2核4G,2g的话基本上被ES就占满了,服务器运行相当的困难,所以我们要通过命令来限制ES使用的内存空间

docker run -d --name elasticsearch01 -p9300:9300 -p9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xms512m" elasticsearch
# -e ES_JAVA_OPTS="-Xms64m -Xms512m" 通过这行代码,设置es的运行内存最小占用64兆,最大占用512兆

commit镜像

我们在启动tomcat容器的时候,发现webapps包下没有文件,需要从webapps.dist文件中将所有文件拷贝到webapps目录下。

拿楼层来举例,dockers为了节省空间,为我们安装的都是基础包,那么这些基础包都在一楼,而我们要进行如tomcat一样的操作,也就是在上面盖楼,追加一些文件。我们肯定不希望每次重启tomcat的时候都再手动盖一层楼,那么我们可以将这两层楼生成一个镜像,以后启动tomcat只需要run两层楼的即可。

docker commit -a="作者" -m="修改的备注" 容器ID 新的镜像名:[tag]

[root@izbp1bc82otjd8cslsu9zsz ~]# docker commit -a="yellowstar" -m="tomcat add webapps" ef2f4dc60310 mytomcat:1.0
sha256:96874184f6c6cc5678d8267b2898adb3c92fae58d326af005f3639059f2e5ac4
[root@izbp1bc82otjd8cslsu9zsz ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mytomcat     1.0       96874184f6c6   8 seconds ago   684MB # 可以发现mytomcat相比于tomcat占用的内存稍微大一些
tomcat       latest    49842ef82091   4 days ago      680MB # 就是因为我们添加了webapps文件
mysql        8.0.27    bbf6571db497   5 days ago      516MB
nginx        latest    f652ca386ed1   5 days ago      141MB
centos       latest    5d0da3dc9764   2 months ago    231MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值