化身天使的博客

docker

1. 安装与配置

1.1. 安装

添加源

sudo apt install apt ca-certificates curl gpg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-add "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

安装

curl https://get.docker.com | sh
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
apt install docker.io docker-compose

1.2. 用户权限

当前用户加入docker组

sudo usermod -aG docker $USER

newgrp docker  #更新用户组 

1.3. 管理

启动Docker:systemctl start docker

停止Docker:systemctl stop docker

重启Docker:systemctl restart docker

查看Docker状态:systemctl status docker

开机启动:systemctl enable docker

当前系统Docker信息:docker info

2. 镜像与容器管理

2.1. 镜像管理

2.1.1. 查看

查看本地镜像

docker images

REPOSITORY   TAG       
centos       centos7

搜索镜像(模糊匹配)
sudo docker search centos7.3

2.1.2. 安装

安装指定镜像(REPOSITORY:TAG , tag缺省值latest)

sudo docker pull centos:centos7

2.1.3. 删除

docker rmi -f 镜像id 删除指定镜像

docker rmi -f $(docker images -aq) 删除所有镜像

2.1.4. 导出镜像

docker commit 9baecfdcfd35 appsmith_new:tag
#将容器9b1导出为appsmith_new镜像

2.2. 容器管理

查看

查看运行中的容器
docker ps


查看所有容器
docker ps -a

查看容器配置信息
docker inspect 容器id

创建容器

docker run -p 8080:80 -d centos:centos7 /bin/bash

根据REPOSITORY  和TAG创建容器并进入容器命令行, tag缺省为latest
-p 容器内的80端口映射到主机8080端口
    -P 容器内部端口随机映射到主机的端口。
--name='容器名字'
-d 后台运行  	#创建后放入后台, 使用exit不会关闭容器, 需要用it重新进入命令行
-it 以交互方式运行 #创建并进入, 使用exit会关闭容器

运行

#启动容器
docker start 容器id

#停止容器
docker stop 容器id 

#重启容器
docker reload 容器id 

docker kill 容器id #强制停止正在运行的容器

#退出

退出容器但不停止
ctrl+p+q 快捷键

退出并停止容器
exit

#进入

docker attach 5838141fbefe  #根据容器id进入指定容器的命令行, exit会停止容器
docker exec -it 5838141fbefe /bin/bash  #同上
docker exec -d 5838141fbefe /bin/bash  #exit 不会停止, 但需要使用it重新进命令行

出错时

Error response from daemon:
使用如下命令启动
docker start 5838141fbefe 
再使用 exec -it 进入

删除容器

docker rm 容器id  #不能删除正在运行的容器

docker rm -f $(docker ps -aq) #删除所有的容器,包括在运行的

2.3. docker-compose方式

创建需要的目录,mongodb如下,复制shell脚本,运行

#!/bin/bash


# 挂载路径
dir_array=('/opt/docker-data/mongodb/data' '/opt/docker-data/mongodb/log' '/opt/docker-data/mongodb/config')

#创建目录并授权
for path in ${dir_array[*]}
do
    if [ -d $path ];then
        echo "$path exist"
    else
        sudo mkdir -p "$path"
        echo "mkdir $path"
        sudo chmod -R 777 "$path"
    fi
done

批量管理容器,yml文件严格注意缩进
vim docker-compose.yml

version: '2' #docker-compose语法的版本
services:
nginx: #创建 nginx容器
    image: hub.c.163.com/library/nginx:latest #网易镜像
    ports:  #端口映射,主机:容器
    - 80:80
    - 443:443
    volumes:
    #- ./nginx/nginx.conf:/etc/nginx/nginx.conf  # ,需要先在当前目录创建./nginx/nginx.conf文件,不然就注释掉
    - ./nginx/conf.d:/etc/nginx/conf.d #把容器的conf.d映射到 ./nginx/conf.d
    - ./src:/var/www #把容器的/var/www 映射到./src

mysql: #mysql的容器
    image: hub.c.163.com/library/mysql:5.7
    volumes:
    - ./mysql/data:/var/lib/mysql #把容器的数据文件夹映射到 ./mysql/data
    - ./mysql/conf.d:/etc/mysql/conf.d # 映射配置目录
    - ./mysql/log:/var/log/mysql
    #- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    #- ./mysql/init:/docker-entrypoint-initdb.d/ #映射初始化文件夹
    ports:
    - 3306:3306 #把容器的3306端口映射到本机的3306
    environment:
    - MYSQL_ROOT_PASSWORD=wonderful #root密码
    - MYSQL_USER=test#另一个帐号
    - MYSQL_PASS=test123#另一个帐号的密码
redis:
    image: redis
    ports:
    - 6379:6379
    environment:
    - REDIS_PASSWORD:wonderful
    #command: ["redis-server","--appendonly","yes","--requirepass","password"]		
    
oracle-11g:
    image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    container_name: oracle-11g
    privileged: true
    restart: always
    environment:
    TZ: "Asia/Shanghai"
    DBCA_TOTAL_MEMORY: 16192
    ports:
    - 1521:1521
    volumes:
    - ./data:/u01/app/oracle
    # sid: orcl
    # service name: orcl
    # username: system
    # password: admin

mongodb:
    image: hub.c.163.com/library/mongo
    container_name: mongodb
    restart: always
    environment:
    - TZ=Asia/Shanghai
    - MONGO_INITDB_DATABASE=abc
    - MONGO_INITDB_ROOT_USERNAME=abc
    - MONGO_INITDB_ROOT_PASSWORD=abc123
    ports:
    - "27017:27017"
    volumes:
    - /opt/docker-data/mongodb/data:/data/db
    - /opt/docker-data/mongodb/logs:/data/logs
    - /opt/docker-data/mongodb/config:/data/configdb

如果装有Oracle, 解决exited with code 139报错
windows当前用户目录下,创建文件.wslconfig, 写入以下内容,重启wsl

[wsl2]
kernelCommandLine = vsyscall=emulate

在同目录下执行

docker-compose up -d #启动容器,在后台运行
docker-compose up    #启动容器
docker-compose up redis -d   #启动指定容器

3. 文件传输

从主机到容器
docker cp /test.jpg  docker_id:/tmp  #使用docker的id或name

从容器到主机
docker cp d_id:/tmp/test.jpg /tmp   #
posted @ 2023-12-25 15:59  化身天使  阅读(7)  评论(0)    收藏  举报