Docker-run命令详细讲解

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令(本小节属于)

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

上小节我们从docker的原理上来讲解了下docker的运行机制,今天我们就从实际操作来体验下docker run的在运行这些操作容器。

我们在Docker被墙以后,我为什么这样做,里面提到过镜像实际上分类,一种是操作系统镜像,一种是业务镜像。里面有些例子可能不是很合适。从我们上小节的例子可能分为是否有前台进程来更适合一点。针对不同的镜像会使用不同的参数,下面就针对这些参数做详细说明。

启动基本参数

这些参数的组合代表了这个容器的运行方式及能否正常启动**。**

ruby 复制代码
#效果是一样的,启动则退出
docker run centos:7
docker run -d centos:7
#启动则进入容器,exit退出容器,则容器关闭
[root@localhost ~]# docker run -it centos:7[root@b914ccb36e5c /]# 

#会阻塞当前终端操作,中断终端则容器退出
docker run nginx
#不会阻塞当前终端,容器会持续在后台运行
docker run -d nginx

下面的这些参数不影响容器是否启动成功,但是它能决定能否按照我们的预期方式进行运行。

添加环境变量

bash 复制代码
# 创建容器,注入数据库密码环境变量
# 这里只是演示,具体请设置强密码
[root@localhost ~]# docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw 192.168.31.43:5000/mysql:5.7
da6a4018d3c1e47b1fae3f0adb63ff78f3ef7fcde7899158e0caaf6da43a188a
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED         STATUS         PORTS                               NAMES
da6a4018d3c1   192.168.31.43:5000/mysql:5.7   "docker-entrypoint.s..."   3 seconds ago   Up 2 seconds   3306/tcp, 33060/tcp                 jolly_euler


#进入容器,并使用注入的密码进行登录mysql
[root@localhost ~]# docker exec -it da6 bash
bash-4.2# mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

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> 

添加端口映射

bash 复制代码
[root@localhost ~]# docker run -d -p80:80 192.168.31.43:5000/nginx
7a559247280c4c6211c89197b2808ca326a0646f644f0433b04a6e70fef0d2ad
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                         COMMAND                  CREATED             STATUS             PORTS                               NAMES7a559247280c   192.168.31.43:5000/nginx      "/docker-entrypoint...."   3 seconds ago       Up 2 seconds       0.0.0.0:80->80/tcp, :::80->80/tcp   stoic_hodgkin

#这里的端口都是docker进程在监听
[root@localhost ~]# netstat -lnp |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7070/docker-proxy

添加磁盘挂载

perl 复制代码
# 容器外面的数据文件可以挂载到容器内部
# 容器里面创建的文件实际会创建到主机里面
[root@localhost ~]# ls
centos7.tar.gz
[root@localhost ~]# docker run -it -v /root:/root centos:7 
[root@2eb1e448090b /]# ls /root/
centos7.tar.gz
[root@2eb1e448090b /]# touch /root/aaa
[root@2eb1e448090b /]# exit
exit
[root@localhost ~]# ls
aaa  centos7.tar.gz

添加主机名

csharp 复制代码
# 可以看到容器的主机名是我们设置的,并不是随机生成
[root@localhost ~]# docker run -h test001 -it centos:7
[root@test001 /]# 

添加容器名字

csharp 复制代码
# 容器名字在最后,没添加就是随机名字
[root@localhost ~]# docker run  -itd centos:7
90b11f48c37dd2f8483a2ff2ae6f3797767ce508a465fd9cfda57eab57af5e53
[root@localhost ~]# docker run  -itd --name centos7 centos:7
a9c28148a23c6ae2a8f77cc7258ffd7a32ff9901094b5c56b256515ac65f0c7d
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
a9c28148a23c   centos:7   "/bin/bash"   11 seconds ago   Up 10 seconds             centos7
90b11f48c37d   centos:7   "/bin/bash"   43 seconds ago   Up 42 seconds             optimistic_shirley

退出则删除

csharp 复制代码
# 容器退出以后,容器就被自动删除
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker run -it --rm centos:7
[root@83510e3d5cdd /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@83510e3d5cdd /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

限制cpu

csharp 复制代码
# 限制了只给0.5核,所以容器里面的死循环可以跑到50%
[root@localhost ~]# docker run -itd --cpus="0.5" centos:7
1a408a957c2c60519e3f15aed8b23ae6d069ea14c30710aa792d93689331c508

[root@localhost ~]# docker stats 1a4

CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O    PIDS
1a408a957c2c   youthful_bassi   49.94%    1.262MiB / 990.9MiB   0.13%     656B / 0B   336kB / 0B   2

限制内存

csharp 复制代码
# 限制以后,这里的limit就不再是宿主机的内存,而是我们给的限制
[root@localhost ~]# docker run -itd -m 512M centos:7
1888ebd8c68bc2edca3410049557e31d20cb9058ead658a891c13007ba39e4b2
[root@localhost ~]# docker stats 1888

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
1888ebd8c68b   gallant_brattain   0.00%     668KiB / 512MiB     0.13%     586B / 0B   3.82MB / 0B   1

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
小张是铁粉15 分钟前
docker学习二天之镜像操作与容器操作
学习·docker·容器
会又不会17 分钟前
Jenkins-Publish HTML reports插件
运维·jenkins
烟雨书信28 分钟前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记32 分钟前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花37 分钟前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay38 分钟前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu1 小时前
redisSearch docker安装
运维·redis·docker·容器
程序员张33 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
IT成长日记5 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子5 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker