如何在docker环境中查看环境目录_docker $PWD路径


docker练习-自定义容器

虽然dockerhub上有丰富的镜像资源供我们选择,但是我们想要运行一个包含自己项目的容器就需要自定义一个镜像,该镜像中包含自定义项目的运行资源。

例:需要一个容器运行教管系统。

步骤1:下载基础镜像

我们的项目运行需要依赖其他资源,因此需要在基础镜像的容器上,去创建容器。教管系统是基于python的Django项目,因此呢,环境资源中必须有python,最好是python3

[root@localhost ~]# docker pull python:3.6
3.6: Pulling from library/python
e4c3d3e4f7b0: Pull complete
101c41d0463b: Pull complete
8275efcd805f: Pull complete
751620502a7a: Pull complete
0a5e725150a2: Pull complete
9ab4bf1101f3: Pull complete
9ba108bf0aed: Pull complete
eac75d8e87c4: Pull complete
3c6283a6d761: Pull complete
Digest: sha256:2031db444b66aac1cd179a5ce85e87dc56bcddc411c2eafe73142347fe026b51
Status: Downloaded newer image for python:3.6
docker.io/library/python:3.6


步骤2:运行容器并进入该容器内部


[root@localhost ~]# docker run -it -d python:3.6   #创建容器
c557599a0669d8f1e6662999904652d303cd1daa98bd8d4ab3720240c7663497
[root@localhost ~]# docker exec -it c557599a0669  /bin/bash   #进入容器内部
root@c557599a0669:/#      这里是容器内部
root@c557599a0669:/# exit    #退出容器
exit


进入容器的语法是


docker exec -it 容器ID或容器名 /bin/bash


步骤3:将教管系统文件拷贝到容器内部

利用FTP工具把教官系统拷贝到虚拟机中(CentOs7)

安装解压工具unzip,如果已安装,跳过这一步


yum install -y unzip


解压教管系统包


unzip yum


将教官系统目录完整拷贝到容器中/opt目录下,或者进入容器自定义一个目录


docker cp restapi-teach c557599a0669:/opt


docker cp 外部文件 目标容器ID:容器内路径

进入容器-查看文件


[root@localhost ~]# docker exec -it c557599a0669 bash
root@c557599a0669:/# ls opt/
restapi-teach
root@c557599a0669:/# ls opt/restapi-teach/
backend  install.bat  run.bat  static


执行install.bat里面的命令


root@c557599a0669:cd /opt/restapi-teach   #切到对应目录
root@c557599a0669:/opt/restapi-teach# pwd
/opt/restapi-teach
root@c557599a0669:/opt/restapi-teach# cat install.bat   #查看内容,复制出来放在命令行执行


pip install django==2.0.4 -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com
pip install cherrypy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com


测试服务是否可以运行


root@c557599a0669:/opt/restapi-teach# cd backend/     #进入backend目录
root@c557599a0669:/opt/restapi-teach/backend# python project/cherrypy_startup.py  #启动服务
[16/Oct/2020:15:41:45] ENGINE Bus STARTING
[16/Oct/2020:15:41:45] ENGINE Started monitor thread 'Autoreloader'.
[16/Oct/2020:15:41:45] ENGINE Serving on http://0.0.0.0
[16/Oct/2020:15:41:45] ENGINE Bus STARTED


步骤4:提交镜像

ctrl+c结束服务,exit退出容器

查看当前镜像,此时,python容器是我们修改过后的了,我们只需保存此次修改


[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
c557599a0669        python:3.6          "python3"                About an hour ago   Up About an hour                             boring_hellman


提交镜像内容


docker commit -m "init restapi-teach" c557599a0669 restapi-teach:v1


这个命令的语法是


# docker commit [OPTIONS] 容器ID或容器名 镜像名:版本号
其中选项可以不填
-a :提交的镜像作者;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。


查看当前系统docker镜像


[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
restapi-teach       v1                  5749a603c9b8        2 minutes ago       913MB


发现已经多了一个自定义的

docker练习-启动自定义镜像

下面可以通过该镜像创建一个容器并运行教管系统


docker run -it -d -p 8080:80 restapi-teach:v1 bash -c "cd /opt/restapi-teach/backend && python project/cherrypy_startup.py"


执行多个命令,所以bash后面加-c参数 命令之间需要以&&符号连接

访问服务地址,


http://192.168.21.142:8080/mgr/ps/mgr/index.html#/


把IP和端口号替换成你自己虚拟机的。发现可以访问教管系统。

docker练习-共享镜像

镜像完成后我们希望可以共享这个镜像,那么别人可以直接下载下来就可以用。通常我们可以推送到自己公司的镜像服务器或者dockerhub, 如果推送到dockerhub需要提前登录docker仓库,方法如下

进入dockerhub,注册一个账号,注册流程很简单,这步略过,实在不会可以百度。

有了账号之后需要在命令行用docker登录此账号


[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: #这里输入用户名
Password: #这里输入密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


看到login succeeded表示登录成功

如果以后想要换公司的私有镜像仓库,


docker logout #先登出
docker login  #后面跟私有仓库地址 如: docker login  http://xxx.com
#输入用户名和密码


此时可以推送镜像到dockerhub了,鉴于网速可能会很慢

推送的语法是docker push 镜像名:版本


[root@localhost ~]# docker push restapi-teach:v1
The push refers to repository [docker.io/library/restapi-teach]
b379057de283: Preparing
079d30d9c3eb: Preparing
28c41b4dd660: Preparing
36957997ca7a: Preparing
5c4d527d6b3a: Preparing
a933681cf349: Waiting
f49d20b92dc8: Waiting
fe342cfe5c83: Waiting
630e4f1da707: Waiting
9780f6d83e45: Waiting
denied: requested access to the resource is denied


发现推送被拒绝,此时需要修改我的镜像名称,前面加上docker hub的用户名


[root@localhost ~]# docker tag 5749a603c9b8 shonekey/restapi-teach:v1   #标记镜像
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# docker images          #再次查看镜像
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
restapi-teach            v1                  5749a603c9b8        3 hours ago         913MB
shonekey/restapi-teach   v1                  5749a603c9b8        3 hours ago         913MB
...


此时推送镜像,网速问题肯能会耗费比较长时间,镜像不要做太大,耐心等待


[root@localhost ~]# docker push shonekey/restapi-teach:v1
The push refers to repository [docker.io/shonekey/restapi-teach]
b379057de283: Pushing [>                                                  ]    406kB/38.56MB
079d30d9c3eb: Pushing [==================================================>]  7.771MB
28c41b4dd660: Pushing [==================================================>]  4.608kB
36957997ca7a: Pushing [==>                                                ]  2.335MB/45.51MB
5c4d527d6b3a: Preparing
a933681cf349: Waiting
f49d20b92dc8: Waiting
fe342cfe5c83: Waiting
630e4f1da707: Waiting
9780f6d83e45: Waiting


镜像推送完成,最后登录自己的Docker Hub,即https://hub.docker.com/ 登录后,在Repositories里面就可以看到自己在上面推送的镜像shonekey/restapi-teach:v1了,这是个对外的镜像,可以在网络上下载。 在Docker hub上可以看到这个镜像的下载命令(注意下载时跟上tag标签,如果是latest的默认tag可以不跟) 也可以直接在Docker hub上删除这个镜像(Repositories-镜像-Settings-delete)

此时可以再另外一台机器上拉取该镜像


docker pull shonekey/restapi-teach:v1


注意需要带上版本号