飞道的博客

Docker——Docker的常用命令和部署一些服务(nginx、tomcat、es+kibana)

246人阅读  评论(0)

帮助命令

docker 命令 --help
docker run --help

显示docker版本信息
docker version
显示docker系统信息,包括镜像和容器的数量
docker info

官方帮助文档

镜像命令

docker images显示本地镜像

Name ,shorthand Description
- -all , -a 显示所有镜像
- -digests 显示摘要
- -filter , -f 根据提供的条件过滤输出
- -format Pretty-print images using a Go template
- -no-trunc 显示镜像完整id
- -quiet , -q 只显示镜像id
docker images

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   6 weeks ago   13.3kB

REPOSITORY 		镜像的仓库源
TAG				镜像的标签
IMAGE ID		镜像的id
CREATED 		镜像的创建时间
SIZE			镜像的大小

常用可选项
-a		列出所有镜像
-q		只显示镜像id

docker search 搜索镜像

Name, shorthand Default Description
- -filter , -f 根据提供的条件过滤输出
- -format Pretty-print search using a Go template
- -limit 25 限制最大搜索数
- -no-trunc 不截断输出
docker search redis

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                            Redis is an open source key-value store that…   9343      [OK]

docker search tomcat

NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3002      [OK]   

常用可选项
--filter
--limit

docker search mysql --filter=STARS=3000

NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10774     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4057      [OK]  

docker search mysql  --limit 2

NAME                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                MySQL is a widely used, open-source relation…   10774     [OK]       
mysql/mysql-server   Optimized MySQL Server Docker images. Create…   793                  [OK]

docker pull 下载镜像

Name, shorthand Default Description
–all-tags , -a 下载存储库中所有标记的镜像
–disable-content-trust true 跳过镜像验证
–platform 如果服务器支持多平台,则设置平台
–quiet , -q 静默输出
docker pull 镜像名[:tag]

[root@docker ~]# docker pull mysql
Using default tag: latest	如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
f7ec5a41d630: Pull complete 	分层下载是docker images的核心,联合文件系统
9444bb562699: Pull complete 
6a4207b96940: Pull complete 
181cefd361ce: Pull complete 
8a2090759d8a: Pull complete 
15f235e0d7ee: Pull complete 
d870539cd9db: Pull complete 
493aaa84617a: Pull complete 
bfc0e534fc78: Pull complete 
fae20d253f9d: Pull complete 
9350664305b3: Pull complete 
e47da95a5aab: Pull complete 
Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a 	签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest	真实地址

它们两个等价
docker pull mysql
docker pull docker.io/library/mysql:latest

我们再去下载mysql:5.7版本
[root@docker ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
f7ec5a41d630: Already exists 	已经存在 共用存在的文件
9444bb562699: Already exists 
6a4207b96940: Already exists 
181cefd361ce: Already exists 
8a2090759d8a: Already exists 
15f235e0d7ee: Already exists 
d870539cd9db: Already exists 
cb7af63cbefa: Pull complete 	只需要下载不一样的文件
151f1721bdbf: Pull complete 
fcd19c3dd488: Pull complete 
415af2aa5ddc: Pull complete 
Digest: sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         5.7       87eca374c0ed   36 hours ago   447MB
mysql         latest    0627ec6901db   36 hours ago   556MB

docker rmi删除镜像

docker rmi	(i指images) 加IMAGE ID


docker rmi 87eca374c0ed

Untagged: mysql:5.7
Untagged: mysql@sha256:a655529fdfcbaf0ef28984d68a3e21778e061c886ff458b677391924f62fb457
Deleted: sha256:87eca374c0ed97f0f0b504174b0d22b0a0add454414c0dbf5ae43870369f6854
Deleted: sha256:3b035442a2f8d52d6c5c2d83a18c6c21a89b4dc6c89b481bcf40df89087655ce
Deleted: sha256:a223f1762b2c619a59b81fc2304bf4c9b791c777c8bdb19760c09cbd1f061efc
Deleted: sha256:92402939b3fd03bee3745eb90df9799bcb7d0ef92ca8ecf7ef37ad9c8a550084
Deleted: sha256:028b21e33aa4cd9c88acdd194d5cbef25638ffbca8669bfc0da72ad1eb148997

[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         latest    0627ec6901db   37 hours ago   556MB
hello-world   latest    d1165f221234   6 weeks ago    13.3kB

删除所有镜像
docker rmi -f $(docker images -qa)

容器命令

可以在官方文档查看命令参数:帮助文档

有了镜像才能创建容器

下载一个centos镜像
docker pull centos

[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   4 months ago   209MB

新建容器并启动

docker run [可选参数] image

常用参数
--name=''	容器名字用来区分容器
-it			使用交互方式运行,进入容器
-d			后台运行
-p(小写)			指定容器端口	
	-p 主机端口:容器端口(常用)
	-p 容器端口
	-p ip:主机端口:容器端口
-P(大写)			随机指定端口
启动容器
docker run -it centos /bin/bash

列出所有容器

列出所有运行中的容器
docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
d7930c98cf2f   centos    "/bin/bash"   About a minute ago   Up About a minute             unruffled_almeida

列出所有容器(运行+未运行的)
docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS                   PORTS     NAMES
d7930c98cf2f   centos         "/bin/bash"   About a minute ago   Up About a minute                  unruffled_almeida
3ab5b06db7a1   d1165f221234   "/hello"      2 hours ago          Exited (0) 2 hours ago             optimistic_zhukovsky

-n=?	显示最近创建的容器
docker ps -a -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
d7930c98cf2f   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             unruffled_almeida

-q	只显示容器的id
docker ps -qa
d7930c98cf2f
3ab5b06db7a1

退出容器

exit	在容器中直接退出(第一次的容器如果输入exit会直接停止)

Ctrl + P + Q	也可以退出容器

删除容器

删除指定容器
docker rm 容器id

删除所有容器
docker rm -f $(docker ps -qa)

不能删除正在运行的容器,如果要强制删除rm -f	
docker rm -f $(docker ps -qa)
d7930c98cf2f
3ab5b06db7a1

或者将容器关闭之后再删除
docker stop 容器id
docker rm 容器id

删除所有容器
docker ps -aq |xargs docker rm

启动和停止容器

启动容器
docker start 容器id

重启容器
docker restart 容器id

停止正在运行的容器
docker stop 容器id

强制停止容器
docker kill 容器id

先创建一个容器
docker run -it -p 8895:8080 --name mao 300e /bin/bash

[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS                                       NAMES
bca41f691e98   300e      "/bin/bash"   35 seconds ago   Up 34 seconds   0.0.0.0:8895->8080/tcp, :::8895->8080/tcp   mao

停止容器
[root@docker ~]# docker stop bca4
bca4

常用的其他命令

后台启动

docker run -d 镜像名
docker run -d centos

但是docker ps 发现centos停止了
常见的问题,因为docker容器使用后台运行,就必须要有一个前台进程,docker发现没有前台进程,就会自动停止

我们用tomcat测试

docker pull tomcat

后台启动
docker run -d -p 8090:8080 --name tomcat1 bd431

使用浏览器访问ip:8080


404的原因是tomcat不是完整的,外网访问测试没有问题

我们进入tomcat容器
docker exec -it tomcat1 /bin/bash

发现webapps里没有文件 因为是阿里云镜像默认是最小的镜像,其他不必要的都剔除了,保证最小可运行环境

我们将webapps.dist里面的所有复制到webapps里
root@c75fbf2b4431:/usr/local/tomcat# cp -r webapps.dist/* webapps

刷新浏览器

查看日志

-tf 	显示日志
--tail number	要显示日志条数

docker logs -tf --tail 10 fe6a3e56f3d0

docker run -d centos /bin/bash -c "while true;do echo "maomao";sleep 1;done"

docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                   
NAMESd2694a95c412   centos    "/bin/bash -c 'while…"   7 seconds ago    Up 6 seconds       

docker logs -tf --tail 10 d2694a95c412
2021-04-21T08:42:40.823781398Z maomao
2021-04-21T08:42:41.826943919Z maomao
2021-04-21T08:42:42.831924257Z maomao
2021-04-21T08:42:43.834038335Z maomao
2021-04-21T08:42:44.836708178Z maomao

查看容器中进程信息

docker top 容器id

docker top d2694a95c412

查看镜像的元数据

docker inspect 容器id

docker inspect d2694a95c412

进入当前运行的容器

docker exec -it 容器id /bin/bash

docker exec -it d2694a95c412 /bin/bash

[root@d2694a95c412 /]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  11880  1532 ?        Ss   08:40   0:00 /bin/bash -c while true;do echo maomao;sleep 1;done
root        740  0.2  0.0  12012  2176 pts/0    Ss   08:53   0:00 /bin/bash
root        786  0.0  0.0  23012   928 ?        S    08:53   0:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/
root        787  0.0  0.0  44620  1784 pts/0    R+   08:53   0:00 ps aux

还有一种进入容器的方法
docker attach 容器id
命令 区别
docker exec 进入容器后开启一个新的终端,可以在里面操作(一般都用这个)
docker attach 进入容器正在执行的终端,不会启动新的终端

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

先开启一个容器
docker run -it --name mao 300e /bin/bash

[root@6fd5dbac170f /]# cd /home/
[root@6fd5dbac170f home]# ls
[root@6fd5dbac170f home]# touch mao.py  # 创建一个文件

退出容器
exit

docker cp 6fd5dbac170f:/home/mao.py /home

[root@docker ~]# ls /home/mao.py 
/home/mao.py

命令手册

attach    # 当前 shell 下 attach 连接指定运行镜像
build     # 通过 Dockerfile 定制镜像
commit    # 提交当前容器为新的镜像
cp        #从容器中拷贝指定文件或者目录到宿主机中
create    # 创建一个新的容器,同 run,但不启动容器
diff      # 查看 docker 容器变化
events    # 从 docker 服务获取容器实时事件
exec      # 进入运行中的容器
export    # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   # 展示一个镜像形成历史
images    # 列出系统当前镜像
import    # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      # 显示系统相关信息
inspect   # 查看容器详细信息
kill      # kill 指定 docker 容器
load      # 从一个 tar 包中加载一个镜像[对应 save]
login     # 注册或者登陆一个 docker 源服务器
logout    # 从当前 Docker registry 退出
logs      # 输出当前容器日志信息
port      # 查看映射端口对应的容器内部源端口
pause     # 暂停容器
ps        # 列出容器列表
pull      # 从docker镜像源服务器拉取指定镜像或者库镜像
push      # 推送指定镜像或者库镜像至docker源服务器
restart   # 重启运行的容器
rm        # 移除一个或者多个容器
rmi       # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       # 创建一个新的容器并运行一个命令
save      # 保存一个镜像为一个 tar 包[对应 load]
search    # 在 docker hub 中搜索镜像
start     # 启动容器
stop      # 停止容器
tag       # 给源中镜像打标签
top       # 查看容器中运行的进程信息
unpause   # 取消暂停容器
version   # 查看 docker 版本号
wait      # 截取容器停止时的退出状态值

Docker安装nginx

搜索nginx
docker search nginx --limit 2

NAME                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                 Official build of Nginx.                        14752     [OK]       
jwilder/nginx-proxy   Automated Nginx reverse proxy for docker con…   2018                 [OK]

拉取镜像
docker pull nginx

docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    62d49f9bab67   8 days ago     133MB

后台启动
docker run -d -p 9000:80 --name nginx01 nginx 
1e846a00a0e95945c68d6081649f7075459671d5d70ab6f45c6a8814deec156f

curl localhost:9000

Docker安装tomcat

一般用来测试,用完则删除
docker run -it --rm tomcat:9.0

我们只要停掉服务 tomcat容器则被删除了
docker ps -a 找不到tomcat容器

docker pull tomcat:9.0

docker run -it -p 9000:8080 --name tomcat01 bd431ca8553c /bin/bash

进入容器之后
cp -r webapps.dist/* webapps/

cd bin/

./startup.sh
Tomcat started.

测试
curl localhost:8080

外部
curl localhost:9000

Docker部署es+kibana

注意:kibana和es版本必须相同。并且要创建docker网络

安装es

官方文档

es 暴露的端口很多,并且是否消耗内存
es的数据需要挂载到安全目录
-e 环境配置修改
--net 将容器加入到docker网络

创建网络
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet

查看网络
ip a

18: br-92dce3760956: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:cd:b2:ab:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global br-92dce3760956
       valid_lft forever preferred_lft forever


安装es
docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.10.1

解决es高消耗的问题
docker stats	# 查看docker容器cpu状态
CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O         PIDS
851074fa63b1   elasticsearch   0.31%     1.207GiB / 3.842GiB   31.41%    648B / 0B   1.71MB / 1.69MB   46
发现消耗内存1.2个G

停掉es容器
docker stop 851074fa63b1

增加内存限制
docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.10.1

查看cpu
docker stats
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O     PIDS
15b9b703aa9c   elasticsearch01   0.62%     371.8MiB / 3.842GiB   9.45%     648B / 0B   0B / 1.61MB   46

curl localhost:9200

安装kibana

运行kibana,同es使用相同版本7.10.1,同样使用mynet网络

docker run -d --name kibana --net mynet -p 5601:5601 kibana:7.10.1

浏览器访问自己ip:5601, 可以查看到kibana 页面,可以访问成功

配置kibanan连接es

删除正在运行的es和kibana
docker rm -f $(docker ps -aq)

新建es数据和配置目录
mkdir -p /data/elasticsearch/{
   config,data}

新建并写入配置文件
echo "http.host: 0.0.0.0" >> /data/elasticsearch/config/elasticsearch.yml

cat config/elasticsearch.yml 
http.host: 0.0.0.0

配置完成,执行命令启动elasticsearch并挂载配置文件到虚拟机目录

docker run -d --name elasticsearch --net mynet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.10.1

配置kibana 连接到es
docker run -d --name kibana --net mynet -e ELASTICSEARCH_HOSTS=http://192.168.188.8:9200 -p 5601:5601 kibana:7.10.1


转载:https://blog.csdn.net/Cantevenl/article/details/115954223
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场