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 #

浙公网安备 33010602011771号