Docker安装与使用(linux)

Docker基本组成

镜像(image):

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

tomcat镜像 ==> run ==> tomcat01容器(提供服务器),

通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

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

启动,停止,删除,基本命令!

目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository):

仓库就是存放镜像的地方!

仓库分为公有仓库和私有仓库!


安装Docker

环境准备
  1. CentOS

  1. 远程连接服务器(我用的WindTerm)

环境查看
查看系统版本我这里用的Centos7
cat /etc/os-release
安装

官网连接Install Docker Engine on CentOS | Docker Documentation

卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
需要的安装包
yum install -y yum-utils

设置镜像仓库--国外的
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

更新yum软件包索引
yum makecache fast
 
安装docker docker-ce社区版 ee企业版
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
启动
systemctl start docker

查看docker版本,是否启动成功
docker version

启动hello-world镜像 --本机没有这个镜像会自动去仓库中搜索,搜索到启动,搜索不到报错
docker run hello-world
 
查看hello-world镜像
docker images
配置阿里云镜像加速(可不配置)

登录成功进入控制台找到容器服务

配置使用

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

卸载

1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
2.删除资源
#/var/lib/docker docker的默认工作路径
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

Docker运行镜像流程


Docker常用命令

镜像命令

docker images
[root@localhost /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   13 months ago   13.3kB
 
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
CREATED 镜像的创建时间
SIZE 镜像的大小
 
#可选项
Options:
  -a, --all             # 列出所有镜像
  -q, --quiet           # 只显示镜像的id
docker search 镜像名 搜索镜像
[root@localhost ~]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13472     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5142      [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   689       [OK]       
percona                         Percona Server is a fork of the MySQL relati…   593       [OK]       
bitnami/mysql                   Bitnami MySQL Docker Image                      79                   [OK]
 
 
#可选项,通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
 
[root@localhost ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   13472     [OK]       
mariadb   MariaDB Server is a high performing open sou…   5142      [OK] 
docker pull 镜像名 下载镜像
#下载镜像 docker pull 镜像名[:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest #如果不写 tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete  #分层下载,docker image的核心,联合文件系统
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 #真实地址
 
#等价命令
docker pull mysql
docker pull docker.io/library/mysql:latest
 
#指定版本下载
[root@localhost ~]# 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 -f 镜像名/镜像id 删除镜像
[root@localhost ~]# docker rmi -f 镜像id #删除指定的镜像
 
[root@localhost ~]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
 
[root@localhost ~]# docker rmi -f $(docker images -aq) #删除全部的容器

容器命令

docker run [可选参数] image
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容i去
-d  后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p  指定容器的端口 -p 8080:8080
  -p ip:主机端口:容器端口
  -p 主机端口:容器端口(常用)
  -p 容器端口
-p 随机指定端口

#测试,启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
[root@8bfe65458325 /]# ls #查看容器内的centos,基础版本,
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
 
# 从容器中退回主机
[root@a84b2702bfe0 /]# exit
exit
[root@localhost /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
 
docker ps 列出当前正在运行的容器
-a   #列出当前正在运行的容器+历史运行过的容器
-n=? #显示最近创建的容器
-q   #只显示容器的编号 

[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS                         PORTS     NAMES
a84b2702bfe0   centos         "/bin/bash"   8 minutes ago       Exited (0) 8 minutes ago                 great_elgamal
退出容器
容器停止并退出
exit 
容器不停止退出
ctrl+p+q
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

后台启动容器 docker run -d 镜像名

docker run -d centos

问题docker ps,发现centos停止了

常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志docker logs -tf -n 容器id
#自己编写一段shell脚本
[root@localhost bin]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
 
#docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8d2913187b91   centos    "/bin/sh -c 'while t…"   14 seconds ago   Up 14 seconds             eloquent_shamir
 
#显示日志
-tf #显示日志
--tail number #显示日志条数
[root@localhost bin]# docker logs -tf --tail 10 8d2913187b91

查看容器中进程信息 docker top 容器id

#命令docker top 容器id
[root@localhost /]# docker top 8d2913187b91
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                32058               32037               0                   01:14               ?                   00:00:00            /bin/sh -c while true;do echo kuangshen;sleep 1;done
root                40447               32058               0                   01:23               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
进入当前正在运行的容器
docker exec -it 容器id /bin/bash
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8d2913187b91   centos    "/bin/sh -c 'while t…"   30 minutes ago   Up 30 minutes             eloquent_shamir
[root@localhost /]# docker exec -it 8d2913187b91 /bin/bash
[root@8d2913187b91 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@8d2913187b91 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 06:14 ?        00:00:00 /bin/sh -c while true;do echo test;sleep 1;don
root       1877      0  0 06:45 pts/0    00:00:00 /bin/bash
root       1922      1  0 06:46 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /
root       1923   1877  0 06:46 pts/0    00:00:00 ps -ef

-i :表示让容器的输入保持打开,

-t:表示让docker分配一个伪终端

-c:免交互直接在容器内执行命令
docker exec -it 8d2913187b91 /bin/bash -c conf/docker.conf

使用 docker exec方式进入容器,前提是容器必须是开启状态
docker attach 容器id
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8d2913187b91   centos    "/bin/sh -c 'while t…"   40 minutes ago   Up 40 minutes             eloquent_shamir
[root@localhost /]# docker attach 8d2913187b91
test
test
test

docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)

docker attach 进入容器正在执行的终端,不不会启动新的进程


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

docker cp 容器id:容器内路径 目的主机路径

拷贝是一个手动过程,未来使用-v数据卷的技术,可以实现同步


基本命令总结

docker version                     显示docker的版本信息
docker info                        显示docker的系统信息,包括镜像和容器的数量
docker images --help               帮助命令
docker images                      查看所有本地主机的镜像
docker images -q                   只显示镜像的id
docker search mysql                搜索mysql镜像
docker search mysql --filter=stars=3000 搜索点击率超过300的mysql镜像
docker pull mysql:5.7              下载镜像mysql5.7版本
docker rmi -f 镜像id                删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id    删除多个镜像
docker rmi -f $(docker images -aq)  删除全部的容器
docker run -it centos /bin/bash    使用交互方式启动并进入容器
docker run -d centos               后台运行容器
docker run -p 8080:8080 centos     启动时指定容器的端口
docker ps                          当前正在运行的容器
docker ps -a                       当前和历史运行的容器
docker ps -q                       只显示容器的编号
docker ps -n 5                     查看最后创建的五个容器
docker ps -l                       查看最新创建的一个容器
docker exec -it 容器id /bin/bash    进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id                进入容器正在执行的终端,不会启动新的进程
docker rm 容器id                    删除指定不在运行的容器
docker rm -f 容器id                 强制删除指定容器
docker ps -a $(docker ps -aq)      删除所有容器
docker ps -a -q|xargs docker rm    删除所有容器
docker start 容器id                 启动容器
docker restart 容器id               重启容器
docker stop 容器id                  停止当前正在运行的容器
docker kill 容器id                  强制停止当前容器
docker logs -tf -n 10 容器id        查看容器的10条日志
docker top 容器id                   查看容器中进程的信息
docker inspect 镜像id               查看镜像的元数据
docker cp 30a7b34f68e5:/shen/shen.txt /home 拷贝容器文件到主机
docker commit  -m="提交的信息" -a "作者" 容器id  目标镜像名:[TAG]需要小写   提交镜像

基本命令流程图


Docker 安装nginx

下载最新的nginx镜像
docker pull nginx
启动nginx映射到8080
docker run -d -p 8080:80 nginx

Docker 安装tomact

下载最新的tomcat
docker pull tomcat
启动
docker run -d -p 8111:8080 tomcat

提交自己的镜像

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

docker commit -m="提交的信息" -a "作者" 容器id 目标镜像名:[TAG]需要小写

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                       NAMES
6ff6daa4e4cf   tomcat    "catalina.sh run"        14 minutes ago   Up 14 minutes   0.0.0.0:8111->8080/tcp, :::8111->8080/tcp   upbeat_herschel
0cf6f676bef7   nginx     "/docker-entrypoint.…"   2 hours ago      Up 2 hours      0.0.0.0:8080->80/tcp, :::8080->80/tcp       sad_cartwright
[root@localhost ~]# docker exec -it 6ff6daa4e4cf /bin/bash
root@6ff6daa4e4cf:/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@6ff6daa4e4cf:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@6ff6daa4e4cf:/usr/local/tomcat# cd webapps
root@6ff6daa4e4cf:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@6ff6daa4e4cf:/usr/local/tomcat/webapps# exit
[root@localhost ~]# docker commit -m="测试" -a"申" 6ff6daa4e4cf tomcattest
sha256:a3432d545d4039e9bb5a80ba8ad9b17ac41dca24d04c9de6d9c26c5802ac5bfb
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
tomcattest   latest    a3432d545d40   11 seconds ago   684MB
nginx        latest    605c77e624dd   12 months ago    141MB
tomcat       9.0       b8e65a4d736d   13 months ago    680MB
tomcat       latest    fb5657adc892   13 months ago    680MB
centos       latest    5d0da3dc9764   16 months ago    231MB

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值