0%

Docker

运行docker

$ service docker start

运行容器

docker run -i -t -p 11000:8888 continuumio/anaconda3 /bin/bash
-ddetach直接后台运行

1
2
3
-i: 是  以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

退出容器并保存在后台
Control + P + Q

进入容器
docker exec -it name /bin/bash
此时exit不会关闭容器

查看运行的容器
docker ps -a

映射或挂载(重要)

宿主机:镜像

默认挂载路径
/var/lib/docker/volumes

镜像相关

生成镜像
docker commit -a "username" -m "msg" container_name new_image_name

上传镜像
将打包好的新镜像上传到 Docker Hub:

首先我们需要将这个新镜像打上 tag,方便在公共服务器进行上传:

docker tag new_anaconda_xgboost:latest nimendavid/machine_learning:v0.1

其中:

new_anaconda_xgboost:latest
(本地镜像名称:tag)

可以通过 docker image ls 查看
nimendavid/machine_learning:v0.1

格式是(dockerhub用户名/仓库名:tag) ,需要自己有一个dockerhub账号,v0.1就是自定义的版本号码

然后记得登录在服务器上dockerhub,否则推送会报错:

docker login

Docker-Compose

update: 2021/10/9

url: +v2.0.1

安装

1
sudo curl -L "https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

有可能会遇到权限不足的问题

1
chmod +x /usr/local/bin/docker-compose

如果不在环境路径下 创建软连接

1
ln -s /usr/bin /usr/local/bin/docker-compose

运行指令

docker-compose指令默认执行当前文件夹下docker-compose.yml文件

项目运行

1
sudo docker-compose -f app.yml up -d

项目停止

1
sudo docker-compose -f app.yml down

挂载

host:container

volumes声明过的名称才能用在镜像的volumes挂载
镜像中volumes挂载地址也可以使用相对路径

更多指令

https://www.jianshu.com/p/658911a8cff3

Docker-GitLab

注意

若容器端口号设置为80,如果你这时修改external_url地址为http://ip:8080.
那GitLab肯定访问不了,因为已经将内部的端口号修改为8080端口了,而映射的是容器的80端口。

故一定要将容器内部端口号与宿主机端口号映射一致!!!

external_utl ‘http://119.23.107.61:13000'
ports:
- “13000:13000”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3'

services:
gitlab:
image: gitlab/gitlab-ce
restart: always
environment:
TZ: "Asia/Shanghai"
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://119.23.107.61:13000' // 好像需要手动改
volumes:
- ~/docker_gitlab/config:/etc/gitlab
- ~/docker_gitlab/logs:/var/log/gitlab
- ~/docker_gitlab/data:/var/opt/gitlab
ports:
- "13000:13000"
- "13443:443"
- "13022:22"

使用Docker搭建图床

安装容器编排工具Compose
pip3 install docker-compose

pull镜像
docker pull mariadb:latest
docker pull nmtan/chevereto:latest

使用Docker-Compose启动
mkdir cheverto/
cd cheverto
touch docker-compose.yaml

docker-compose.yaml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
version: '3'

services:
db:
image: mariadb
volumes:
- database:/var/lib/mysql:rw
restart: always
networks:
- private
environment:
MYSQL_ROOT_PASSWORD: chevereto_root
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: chevereto

chevereto:
depends_on:
- db
image: nmtan/chevereto
restart: always
networks:
- private
environment:
CHEVERETO_DB_HOST: db
CHEVERETO_DB_USERNAME: chevereto
CHEVERETO_DB_PASSWORD: chevereto
CHEVERETO_DB_NAME: chevereto
CHEVERETO_DB_PREFIX: chv_
volumes:
- chevereto_images:/var/www/html/images:rw
- chevereto_php_config:/usr/local/etc/php:rw
ports:
- 12000:80

networks:
private:
volumes:
database:
chevereto_images:
chevereto_php_config:

对应挂载到当前文件夹中的php.ini文件(注意 php.ini文件需要先创建 否则docker会自动创建同名文件夹)
- ./php.ini:/usr/local/etc/php/php.ini:rw

php.ini

1
2
3
memory_limit = 256M;
upload_max_filesize = 100M;
post_max_size = 100M;

运行Docker-Compose
docker-compose up -d

使用Docker配置Anaconda环境运行Jupyter

配置Anaconda环境

挂载

  • 文件夹挂载
    -v /root/notebook:/notebook
    (宿主机目录:镜像内挂载目录)

  • 配置文件挂载(生成的文件夹)
    -v /root/docker/config/anaconda3/jupyter_notebook_config.json:/root/.jupyter/jupyter_notebook_config.json

Example
docker run -i -t -p 11000:8888 -v ~/notebook:/notebook -v ~/docker/config/jupyter:/root/.jupyter continuumio/anaconda3 /bin/bash
挂载参数要在容器前

配置Jupyter Notebook

jupyter notebook --allow-root

启动Notebook
jupyter notebook --port 8888 --ip 0.0.0.0 --allow-root

后台运行Notebook
nohup jupyter notebook --port 8888 --ip 0.0.0.0 --allow-root &

相关配置

配置文件

1
2
3
4
5
6
7
8
c = get_config()
c.IPKernelApp.pylab = "inline"
c.NotebookApp.ip = "*"
c.NotebookAPp.open_browser = False
c.NotebookApp.password = 'sha1:5295d47ebd06:cdca9499f90b4b4616c935fdff61dda71e1e4393'
# c.NotebookApp.certfile = u'/root/.jupyter/mycert.pem'
c.NotebookApp.port= 8888
c.NotebookApp.notebook_dir = "/"

docker-compose配置出问题?

1
2
3
4
5
6
7
8
9
10
11
version: '3'

services:
notebook:
image: continuumio/anaconda3
restart: "no"
volumes:
- ~/notebook:/notebook
- ~/docker/config/jupyter:/root/.jupyter
ports:
- "11000:80"