docker的使用

docker服务:

启动服务:

systemctl start docker.service

关闭服务:

systemctl stop docker.service

重启服务:

systemctl restart docker.service

查看docker运行状态:

systemctl status docker

非root用户使用docker

非root用户查看docker信息,只能看到client版本:

[zhangqi@localhost root]$ docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/version: dial unix /var/run/docker.sock: connect: permission denied

想要在非root用户下使用docker,需要在root用户下执行下面的命令:
sudo usermod -aG docker 非root用户名

[root@localhost ~]# sudo usermod -aG docker zhangqi

切换到非root用户执行docker version:

[zhangqi@localhost root]$ docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:17 2019
  OS/Arch:          linux/amd64
  Experimental:     false

配置镜像加速器

打开下面这个链接,登录阿里云账号:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

根据提示在/etc/docker/daemon.json文件中配置自己的加速器地址
在这里插入图片描述

查看所有镜像

docker images

获取镜像

#不加版本默认拉取latest版本
docker pull 镜像名字:版本
[root@localhost ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
dc65f448a2e2: Pull complete 
346ffb2b67d7: Pull complete 
dea4ecac934f: Pull complete 
8ac92ddf84b3: Pull complete 
d8ef64070a18: Pull complete 
6577248b0d6e: Pull complete 
576c0a3a6af9: Pull complete 
6e0159bd18db: Pull complete 
8c831308dd9e: Pull complete 
c603174def53: Pull complete 
Digest: sha256:e895bcbfa20cf4f3f19ca11451dabc166fc8e827dfad9dd714ecaa8c065a3b18
Status: Downloaded newer image for tomcat:latest

删除镜像

docker rmi 镜像id

搜索镜像

一般使用OFFICIAL,也就是官方发布的

[root@localhost ~]# docker search tomcat
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   2646                [OK]                
tomee                         Apache TomEE is an all-Apache Java EE certif…   74                  [OK]                
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   53                                      [OK]
bitnami/tomcat                Bitnami Tomcat Docker Image                     31                                      [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      28                                      
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              17                                      [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                                      [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              12                                      [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   10                                      
rightctrl/tomcat              CentOS , Oracle Java, tomcat application ssl…   6                                       [OK]
maluuba/tomcat7-java8         Tomcat7 with java8.                             4                                       
unidata/tomcat-docker         Security-hardened Tomcat Docker container.      4                                       [OK]
amd64/tomcat                  Apache Tomcat is an open source implementati…   2                                       
arm64v8/tomcat                Apache Tomcat is an open source implementati…   2   

交互式运行容器

docker run -it 镜像:版本

docker run -it ubuntu:15.10 /bin/bash

交互式运行容器,会进入容器内部,退出使用exit命令

进入正在运行的容器

[root@localhost myubuntu]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
05e088da9269        tomcat              "catalina.sh run"   6 minutes ago       Up 6 minutes        0.0.0.0:8080->8080/tcp   tomcatTest
[root@localhost myubuntu]# docker exec -it 05e088da9269 /bin/bash

后台运行容器

后台运行:运行容器后,容器会一直处于运行的状态,相反的是前台运行,就是容器只会运行一次

docker run -d ubuntu:15.10 /bin/bash

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

查看日志

docker logs 容器id

停止容器

docker stop 容器id

删除容器

docker rm 容器id
docker rm 容器id1 容器id2 ...

重启容器

docker start 容器id
或
docker restart 容器id

与正在运行的容器进行交互

docker exec -it 容器id /bin/bash

客户端帮助命令

查看docker有哪些命令:

docker command --help

查看特定命令

如:查看ps相关的命令

[root@localhost ~]# docker ps --help

Usage:	docker ps [OPTIONS]

List containers

Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display numeric IDs
  -s, --size            Display total file sizes

运行web容器

[root@localhost ~]# docker run -d -P training/webapp python app.py
e90e036e48410dadf97d3ce25b4b6f2af80b62faa0b4ed44431aa3ffa693fcac
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
e90e036e4841        training/webapp     "python app.py"     6 seconds ago       Up 5 seconds        0.0.0.0:32769->5000/tcp   amazing_nobel

-P:将宿主机的端口映射到docker容器,这里将宿主机的32769端口映射到了容器的5000端口

-d:在后台运行docker容器

指定web容器映射端口

[root@localhost ~]# docker run -d -p 5000:5000 training/webapp python app.py
f2b504f5c128e50fd723489533b138ed077b7b0927501a1d8ac0cc9b9f7c6312
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
f2b504f5c128        training/webapp     "python app.py"     9 seconds ago       Up 7 seconds        0.0.0.0:5000->5000/tcp   lucid_chaplygin

前面的端口是宿主机端口,后面的是容器的端口

查看容器进程

docker top 容器id
[root@localhost ~]# docker top f2b504f5c128
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                53488               53469               0                   04:26               ?                   00:00:00            python app.py

查看web容器状态

docker inspect 容器Id

查看容器底层信息,会返回一个Json文件记录者docker容器的配置和状态信息

[root@localhost ~]# docker inspect f2b504f5c128
[
    {
        "Id": "f2b504f5c128e50fd723489533b138ed077b7b0927501a1d8ac0cc9b9f7c6312",
        "Created": "2020-02-26T12:26:44.505095341Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],

创建镜像

当我们从镜像仓库下载的镜像不能满足我们的需求时,可以从以下两种方式对镜像进行更改:

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
#交互式进入容器
docker run -it ubuntu:latest /bin/bash
#根据需求修改容器,如:安装vi编辑器,修改yum源等
...
#退出容器并提交
# -m:描述   -a:谁修改的   zhangqi/ubuntu:test:提交后的镜像名称和标签
docker commit -m="替换yum源" -a="zhangqi" 容器id zhangqi/ubuntu:test
  1. 使用dockerfile指令创建一个新的镜像

Dockerfile

Dockerfile是一个包含用于组合镜像命令的文本文档,可以使用在命令行中调用的任何命令,docker通过读取dockerfile中的命令自动生成镜像

docker build 命令用于从Dockerfile中读取命令创建镜像,可以通过 -f 参数指向任何位置的dockerfile

docker build -f /path/to/a/Dockerfile

Dockerfile的命令不区分大小写,但必须遵循使用大写字母的约定

Dockerfile文件的详细用法参考:
转自:https://www.jianshu.com/p/ae476d193b29

下面是一个创建镜像的例子:

[root@localhost myubuntu]# vi Dockerfile 
[root@localhost myubuntu]# cat Dockerfile 
FROM ubuntu:15.10

MAINTAINER zhangqi

RUN /bin/bash -c 'echo "hello world"'

#拷贝宿主机的资源到容器中,前面是宿主机的资源,不指定目录时默认为当前目录,后者为容器目录
COPY test.txt /home

#指定工作目录,作用相当于cd
WORKDIR /home

#暴露容器端口,可以暴露多个端口
EXPOSE 80
EXPOSE 8080

#一个Dockerfile只能有一句CMD,第一个元素是命令,后面的元素是参数
#如果有多个CMD,则只会执行最后一个命令
CMD ["/bin/echo", "this is a test echo"]
[root@localhost myubuntu]# docker build -t zhangqi/myubuntu .
Sending build context to Docker daemon  3.584kB
Step 1/8 : FROM ubuntu:15.10
15.10: Pulling from library/ubuntu
7dcf5a444392: Pull complete 
759aa75f3cee: Pull complete 
3fa871dc8a2b: Pull complete 
224c42ae46e7: Pull complete 
Digest: sha256:02521a2d079595241c6793b2044f02eecf294034f31d6e235ac4b2b54ffc41f3
Status: Downloaded newer image for ubuntu:15.10
 ---> 9b9cb95443b5
Step 2/8 : MAINTAINER zhangqi
 ---> Running in d6d8e23408f3
Removing intermediate container d6d8e23408f3
 ---> b38021dbeaea
Step 3/8 : RUN /bin/bash -c 'echo "hello world"'
 ---> Running in 0001565bcec3
hello world
Removing intermediate container 0001565bcec3
 ---> 73da3a54a648
Step 4/8 : COPY test.txt /home
 ---> 06b320013254
Step 5/8 : WORKDIR /home
 ---> Running in 554e59b3e53d
Removing intermediate container 554e59b3e53d
 ---> ad939d836919
Step 6/8 : EXPOSE 80
 ---> Running in 029a2444a07c
Removing intermediate container 029a2444a07c
 ---> acf4dc069346
Step 7/8 : EXPOSE 8080
 ---> Running in ceb0d8d0ee8c
Removing intermediate container ceb0d8d0ee8c
 ---> 874131518a3f
Step 8/8 : CMD ["/bin/echo", "this is a test echo"]
 ---> Running in 187b3cfbf762
Removing intermediate container 187b3cfbf762
 ---> 9f323d9f060e
Successfully built 9f323d9f060e
Successfully tagged zhangqi/myubuntu:latest
[root@localhost myubuntu]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zhangqi/myubuntu    latest              9f323d9f060e        17 seconds ago      137MB

docker运行tomcat

–name:为容器取一个名字,不加会随机去一个名字

[root@localhost myubuntu]# docker run -d --name tomcatTest -p 8080:8080 tomcat
05e088da9269bac23e5e5f829ab0363cc8e4671a7511316d92afce679a170ce4
[root@localhost myubuntu]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
05e088da9269        tomcat              "catalina.sh run"   5 seconds ago       Up 4 seconds        0.0.0.0:8080->8080/tcp   tomcatTest

docker安装mysql

命令:
-v :数据卷的意思,后面有数据卷的用法

\ : 命令太长,用 \ 换行

注意:最开始配置数据卷的时候,mysql的配置信息目录配置的为:

/usr/local/mysql/conf:/etc/mysql

导致容器能成功运行,但登录mysql的时候,输入密码却登录不了mysql,最后是加了一个conf.d目录才成功

docker run --name mysql -p 3306:3306 \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/logs:/var/log/mysql \
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
docker pull mysql

[root@localhost conf]# docker run --name mysql -p 3306:3306 \
> -v /usr/local/mysql/data:/var/lib/mysql \
> -v /usr/local/mysql/logs:/var/log/mysql \
> -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -d mysql
808a4cd9202e0fa7222959c76e464f597b748ab5c420dded8f9a4e8998f68132
[root@localhost conf]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
808a4cd9202e        mysql               "docker-entrypoint.s…"   3 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

[root@localhost conf]# docker exec -it 808a4cd9202e /bin/bash
root@808a4cd9202e:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

navacat连接mysql

navicat连接docker启动的mysql是出现了以下问题:
在这里插入图片描述
解决步骤:

  1. 进入容器,登录mysql
[root@localhost conf.d]# docker exec -it 808a4cd9202e /bin/bash
root@808a4cd9202e:/# mysql -uroot -p

  1. 执行下面的命令,再用navicat连接即可
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

在docker运行的tomcat中部署项目

第一步

根据上面的步骤安装并启动mysql后

第二步

根据自己的情况,修改项目配置参数:

spring.datasource.url=
spring.datasource.username=root
spring.datasource.password=123456

url中的ip为docker宿主机(虚拟机)ip,端口为mysql映射到的宿主机的端口:第一个端口,密码为启动mysql容器配置的密码

[root@localhost conf]# docker run --name mysql -p 3306:3306 \
> -v /usr/local/mysql/data:/var/lib/mysql \
> -v /usr/local/mysql/logs:/var/log/mysql \
> -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -d mysql
第三步

项目打war包上传到服务器
在这里插入图片描述

第四步

使用Dockerfile方式创建镜像

Dockerfile的内容:
在这里插入图片描述
目的是将自己的项目放到tomcat的webapps目录下

然后创建镜像:

[root@localhost bwcar]# docker build -t bwcar/test .
Sending build context to Docker daemon  47.34MB
Step 1/3 : FROM tomcat
 ---> aeea3708743f
Step 2/3 : MAINTAINER zhangqi
 ---> Running in 1ee5baafbb8b
Removing intermediate container 1ee5baafbb8b
 ---> 0a3d2e133928
Step 3/3 : ADD bwcar.war /usr/local/tomcat/webapps/bwcar.war
 ---> 0e545d5955df
Successfully built 0e545d5955df
Successfully tagged bwcar/test:latest

bwcar/test: 创建的镜像的名称
. : Dockerfile文件的路径

[root@localhost bwcar]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
bwcar/test          latest              0e545d5955df        4 seconds ago       576MB
mysql               latest              c8ad2be69a22        4 days ago          465MB
tomcat              latest              aeea3708743f        2 weeks ago         529MB
ubuntu              15.10               9b9cb95443b5        3 years ago         137MB

最后一步

根据镜像创建容器:

[root@localhost bwcar]# docker run --name bwcarTest -d -p 8080:8080 bwcar/test
c4de682bdef861f100dd7a104aa5dafdb85e3841eea3c812e22ee74bfc041911
[root@localhost bwcar]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
c4de682bdef8        bwcar/test          "catalina.sh run"        About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp              bwcarTest
808a4cd9202e        mysql               "docker-entrypoint.s…"   3 days ago           Up 18 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

容器正常运行后,正常访问项目即可

数据卷

数据卷是一个供一个或多个容器共同使用的特殊目录

作用:

  1. 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上数据卷的内容,所以是本地磁盘IO的性能,而不是现在容器中写一份,最后还要将容器中修改的内容拷贝出来进行同步)
  2. 绕过“拷贝写”系统,有些文件不需要再 docker commit 打包进镜像文件
  3. 在多个容器间共享目录
  4. 在宿主和容器间共享目录
  5. 在宿主和容器间共享一个文件
创建数据卷

方法一:dockerfile中指定VOLUME后的目录,如:

VOLUME ["/dataVolumeContainer1",/dataVolumeContainer2”]

方法二:docker run 命令中加上-v 选项,如:

[root@localhost conf]# docker run --name mysql -p 3306:3306 \
> -v /usr/local/mysql/data:/var/lib/mysql \
> -v /usr/local/mysql/logs:/var/log/mysql \
> -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -d mysql
备份数据卷

备份原理:利用tar -zcvf 对数据卷进行打包压缩

比如对Mysql的数据卷进行备份:

[root@localhost conf]# docker run --name mysql -p 3306:3306 \
> -v /usr/local/mysql/data:/var/lib/mysql \
> -v /usr/local/mysql/logs:/var/log/mysql \
> -v /usr/local/mysql/conf.d:/etc/mysql/conf.d \
> -e MYSQL_ROOT_PASSWORD=123456 \
> -d mysql

进入/usr/local/mysql目录,进行打包压缩备份

[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# tar -zcvf backup20200302.tar.gz .
[root@localhost mysql]# ls
backup20200302.tar.gz  conf.d  data  logs

Docker Compose

简介

Docker Compose是一种用于通过使用单个命令创建和启动Docker应用程序的工具,我们可以使用它来配置应用程序的服务

它是开发,测试和升级环境的利器

它提供一下命令来管理应用程序的整个生命周期:

  1. 启动,停止和重建服务
  2. 查看运行服务的状态
  3. 流式运行服务的日志输出
  4. 在服务上运行一次性命令

要实现Docker Compose要实现以下步骤:

  1. 将应用程序环境变量放在Docker文件中以公开访问
  2. 在 docker-compose.yml 文件中提供和配置服务名称,以便他们可以在隔离的环境中一起运行
  3. 运行docker-compose, compose将启动并运行整个应用程序
安装Docker Compose

参考:http://www.likecs.com/show-31668.html

[root@localhost docker]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc23009a.m.daocloud.io 
[root@localhost docker]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   423  100   423    0     0    171      0  0:00:02  0:00:02 --:--:--   171
100 11.2M  100 11.2M    0     0  1621k      0  0:00:07  0:00:07 --:--:-- 2523k
[root@localhost bin]# chmod +x /usr/local/bin/docker-compose 
[root@localhost bin]# ls
docker-compose
[root@localhost bin]# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

Docker Compose的使用

官方文档:https://docs.docker.com/compose/

命令:
https://www.cnblogs.com/yyxianren/p/10894708.html

第一步

创建docker-compose.yml配置文件:

[root@localhost tomcat]# vi docker-compose.yml

在这里插入图片描述

第二步

启动容器:

docker-compose up
[root@localhost tomcat]# docker-compose up
Creating network "tomcat_default" with the default driver
Creating tomcat ... done
Attaching to tomcat

第三步

停止容器:

docker-compose down
[root@localhost tomcat]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
7d9bd832095c        tomcat              "catalina.sh run"        2 minutes ago       Exited (143) 8 seconds ago                        tomcat
c4de682bdef8        bwcar/test          "catalina.sh run"        4 hours ago         Exited (143) 20 minutes ago                       bwcarTest
808a4cd9202e        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 20 minutes ago                         mysql
[root@localhost tomcat]# docker-compose down
Removing tomcat ... done
Removing network tomcat_default
[root@localhost tomcat]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
c4de682bdef8        bwcar/test          "catalina.sh run"        4 hours ago         Exited (143) 21 minutes ago                       bwcarTest
808a4cd9202e        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 21 minutes ago                         mysql

docker compose配置数据卷

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值