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


目录
相关文章
|
11天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
42 4
|
8天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
95 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
10天前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
32 5
Linux系统之安装OneNav个人书签管理器
|
9天前
|
运维 监控 Linux
Linux系统之部署Linux管理面板1Panel
【10月更文挑战第20天】Linux系统之部署Linux管理面板1Panel
52 2
Linux系统之部署Linux管理面板1Panel
|
12天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
31 5
Linux系统之安装Ward服务器监控工具
|
14天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
32 2
Linux系统之安装cook菜谱工具
|
16天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
63 4
Linux系统之Ubuntu安装cockpit管理工具
|
15天前
|
安全 Linux
Linux系统之lsof命令的基本使用
【10月更文挑战第14天】Linux系统之lsof命令的基本使用
71 2
Linux系统之lsof命令的基本使用
|
17天前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
44 1
Linux系统之Centos7安装cockpit图形管理界面
|
1天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。