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"
],
创建镜像
当我们从镜像仓库下载的镜像不能满足我们的需求时,可以从以下两种方式对镜像进行更改:
- 从已经创建的容器中更新镜像,并且提交这个镜像
#交互式进入容器
docker run -it ubuntu:latest /bin/bash
#根据需求修改容器,如:安装vi编辑器,修改yum源等
...
#退出容器并提交
# -m:描述 -a:谁修改的 zhangqi/ubuntu:test:提交后的镜像名称和标签
docker commit -m="替换yum源" -a="zhangqi" 容器id zhangqi/ubuntu:test
- 使用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是出现了以下问题:
解决步骤:
- 进入容器,登录mysql
[root@localhost conf.d]# docker exec -it 808a4cd9202e /bin/bash
root@808a4cd9202e:/# mysql -uroot -p
- 执行下面的命令,再用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
容器正常运行后,正常访问项目即可
数据卷
数据卷是一个供一个或多个容器共同使用的特殊目录
作用:
- 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上数据卷的内容,所以是本地磁盘IO的性能,而不是现在容器中写一份,最后还要将容器中修改的内容拷贝出来进行同步)
- 绕过“拷贝写”系统,有些文件不需要再 docker commit 打包进镜像文件
- 在多个容器间共享目录
- 在宿主和容器间共享目录
- 在宿主和容器间共享一个文件
创建数据卷
方法一: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应用程序的工具,我们可以使用它来配置应用程序的服务
它是开发,测试和升级环境的利器
它提供一下命令来管理应用程序的整个生命周期:
- 启动,停止和重建服务
- 查看运行服务的状态
- 流式运行服务的日志输出
- 在服务上运行一次性命令
要实现Docker Compose要实现以下步骤:
- 将应用程序环境变量放在Docker文件中以公开访问
- 在 docker-compose.yml 文件中提供和配置服务名称,以便他们可以在隔离的环境中一起运行
- 运行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