Docker 在 Linux 系统使用

简介: Docker 在 Linux 系统使用

image.png

Docker教程

github.com/yeasy/docke…

1. 查看系统中是否已经安装好了 docker , 输入 docker -v , 如果没有安装先进行 docker 安装,下面为 docker 17.06 版本

gyw@gyw:~$ docker -v 
Docker version 17.06.0-ce, build 02c1d87

2. 进入项目根目录,运行 docker run -ti --rm --name TestProject -p 8081:8081 -p 5000:5000 -v $(pwd):/workspace sgdockerfilebox/project_cpu bash 命令,进入容器,效果如下

gyw@gyw:~/Desktop/code/project/TestProject$ docker run -ti --rm --name TestProject -p 8081:8081 -p 5000:5000 -v $(pwd):/workspace sgdockerfilebox/project_cpu bash
gg-ai@448a6dc3f155:/$ ls
bin   dev  home  lib64  mnt  proc     root  sbin  srv  tmp  var
boot  etc  lib   media  opt  project  run   src   sys  usr  workspace


3. 进入前端项目根目录,执行 npm run dev 运行前端程序,效果如下

gg-ai@448a6dc3f155:/$ cd workspace/
gg-ai@448a6dc3f155:/workspace$ ls
Dockerfile  Dockerfile_cpu  Makefile.sh  README.TestProject  src
gg-ai@448a6dc3f155:/workspace$ cd src
gg-ai@448a6dc3f155:/workspace/src$ ls
backend  frontend 
gg-ai@448a6dc3f155:/workspace/src$ cd frontend/
gg-ai@448a6dc3f155:/workspace/src/frontend$ npm run dev 
> TestProject@1.0.0 dev /workspace/src/frontend
> node build/dev-server.js
Dev server listening at http://localhost:8081
...    
webpack: Compiled successfully.

4. 重新打开一个命令窗口,执行 docker exec -ti TestProject bash 进入已经启动的容器环境,进入后端根目录,执行 python3 TestProject_server.py 运行后端程序

gyw@gyw:~$ docker exec -ti TestProject bash 
gg-ai@448a6dc3f155:/$ ls
bin   dev  home  lib64  mnt  proc     root  sbin  srv  tmp  var
boot  etc  lib   media  opt  project  run   src   sys  usr  workspace
gg-ai@448a6dc3f155:/$ cd workspace/src/backend/
gg-ai@448a6dc3f155:/workspace/src/backend$ python3 TestProject_server.py 
Using TensorFlow backend.
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

5. 停止程序,使用快捷键 Ctrl + c ,退出容器,使用 exit ,例如前端退出效果

...
webpack: Compiled successfully.
^C
gg-ai@448a6dc3f155:/workspace/src/frontend$ exit
exit
gyw@gyw:~/Desktop/code/project/TestProject$ 

查看运行的容器列表

docker ps  

查看所有容器,包括已经停止的容器

docker ps -a

移除一个或多个容器

docker rm

删除镜像

docker rmi id 

默认构建当前文件夹下的Dockerfile

docker build -t e2e:v1  . 

搜索镜像

docker search image

启动一个或多个停止的容器

docker start [option] CONTAINER [CONTAINER...]

停止一个或多个运行的容器

docker stop [OPTIONS] CONTAINER [CONTAINER...]

在正在运行的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

以交互形式进入一个运行的容器

docker exec -it container bash

运行一个容器,并进入交互模式

docker run -ti --name wewo -v $(pwd):/workspace sgdockerfilebox/wewo_cpu:v1 bash

进入运行状态的 docker 交互界面

docker attach dockerName 


退出交互界面快捷键,但不停止

ctrl + shift + p + qctrl + p + q

退出交互界面,但不停止

exit

将容器的文件系统导出为tar存档

docker export [OPTIONS] CONTAINER
eg.
docker export node-env > node-env-1.tar
docker export --output="node-env-1.tar" node-env

导入 tar 文件创建新镜像

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
eg.
docker import node-env-1.tar node-1

运行容器,指定 ip 形式

docker run -it --name frontend -p 23006:23006 -p 8081:8081 -p 23002:23002 -p 3000:3000 -p 23007:23007 -p 23005:23005 -v $(pwd):/workspace 172.16.10.10:5000/sg-ai/node:v9.2.1 bash

docker 修改 repository 名称 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] (这里是 tag 复制)

$ docker tag --help 
Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

获取容器日志

docker logs CONTAINER

查看 Docker 容器信息,返回 json 格式信息

docker inspect CONTAINER

上传容器到私有仓库 (注意一个协议问题,如果服务器限制http协议上传,那么本次上传到服务器会出现)

docker push 
$ docker tag node:latest 172.16.10.10:5000/node-10.12.0:v1
$ docker images  
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
172.16.10.10:5000/node-10.12.0           v1                  a2b9536415c2        3 weeks ago         674MB
$ docker tag node:latest 172.16.10.10:5000/node-10.12.0:v1
$ docker push 172.16.10.10:5000/node-10.12.0:v1
The push refers to repository [172.16.10.10:5000/node-10.12.0]
0d2922b53ccb: Mounted from node-yarn-1.10.1 
c6af84086075: Mounted from node-yarn-1.10.1 
fae583f1d4e5: Mounted from node-yarn-1.10.1 
9d22e51f0c6d: Mounted from node-yarn-1.10.1 
58b8d417193d: Mounted from node-yarn-1.10.1 
704a8634956f: Mounted from node-yarn-1.10.1 
05f0b6bcfa5c: Mounted from node-yarn-1.10.1 
0972cc82b682: Mounted from node-yarn-1.10.1 
v1: digest: sha256:65b285a4a7a5eae3de7b7fbf935e6b6c2aa529b601a0e96671bd65f4b43a8d72 size: 2007

在服务器部署前端工程出现的问题

在前端工程目录下执行 docker run --rm -v $(pwd):/root/projects_123/frontend node-10.12.0 yarn install 命令后没出现 node_modules 文件夹

[frontend]$ ls
babel.config.js  package.json  package-lock.json  postcss.config.js  public  README.md  src  yarn.lock
[frontend]$ docker run --rm -v $(pwd):/root/projects_123/frontend node-10.12.0 yarn install
yarn install v1.10.1
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 0.08s.
[frontend]$ ls
babel.config.js  package.json  package-lock.json  postcss.config.js  public  README.md  src  yarn.lock

解决方式

使用 -w 参数,指定 yarn install 命名在容器内容的工作目录

[frontend]$ docker run --help
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
  -w, --workdir string                 Working directory inside the container
...
[frontend]$ docker run --rm -v $(pwd):/root/projects_123/frontend -w /root/projects_123/frontend  node-10.12.0:v1 yarn install
yarn install v1.10.1
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning "@vue/cli-plugin-babel > babel-loader@8.0.4" has incorrect peer dependency "@babel/core@^7.0.0".
warning "@vue/cli-plugin-babel > babel-loader@8.0.4" has unmet peer dependency "webpack@>=2".
warning "@vue/cli-plugin-eslint > eslint-loader@2.1.1" has unmet peer dependency "webpack@>=2.0.0 <5.0.0".
warning "@vue/cli-plugin-pwa > workbox-webpack-plugin@3.6.3" has unmet peer dependency "webpack@^2.0.0 || ^3.0.0 || ^4.0.0".
warning "@vue/eslint-config-standard > eslint-config-standard@12.0.0" has unmet peer dependency "eslint@>=5.0.0".
warning "@vue/eslint-config-standard > eslint-config-standard@12.0.0" has incorrect peer dependency "eslint-plugin-node@>=7.0.0".
warning "@vue/eslint-config-standard > eslint-config-standard@12.0.0" has incorrect peer dependency "eslint-plugin-promise@>=4.0.0".
warning "@vue/eslint-config-standard > eslint-config-standard@12.0.0" has incorrect peer dependency "eslint-plugin-standard@>=4.0.0".
warning "@vue/eslint-config-standard > eslint-plugin-import@2.14.0" has unmet peer dependency "eslint@2.x - 5.x".
warning "@vue/eslint-config-standard > eslint-plugin-node@6.0.1" has unmet peer dependency "eslint@>=3.1.0".
warning "@vue/eslint-config-standard > eslint-plugin-standard@3.1.0" has unmet peer dependency "eslint@>=3.19.0".
[4/4] Building fresh packages...
Done in 42.71s.
[frontend]$ ls
babel.config.js  node_modules  package.json  package-lock.json  postcss.config.js  public  README.md  src  yarn.lock


目录
相关文章
|
23天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
64 3
|
23天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
59 2
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
44 5
linux系统服务二!
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
44 3
linux系统服务!!!
|
18天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
15 3
|
2月前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
317 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
23天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
64 3
|
26天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
43 6
|
26天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
64 6
|
27天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
54 5