在 CentOS 使用 docker
Docker容器技术的特点
1 | 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。 |
安装
1 | sudo yum remove docker # 删除 老的版本 |
命令
- run
- start
- stop
- restart
- log
win拷贝容器文件到本地(linux 把 copy 换成 cp 即可)
1 | - `copy /?`帮助 |
重启docker服务
1 | systemctl restart docker |
关闭docker
1 | systemctl stop docker |
doker停止后启动方法
1 | systemctl start docker |
查看是否启动成功
docker ps -a
查看命令
docker ps
正在运行的镜像docker ps -a
所有镜像netstat -tlunp
查看端口
进入容器内部执行命令
- 方法一
docker exec -it 38a2cae4c63f sh
- 方法二
docker exec -it blog sh
镜像加速
- 方法一
docker --registry-mirror=https://registry.docker-cn.com daemon
- 方法二
vi /etc/docker/daemon.json
—>{"registry-mirrors":["https://registry.docker-cn.com"]}
- 重启daemon
systemctl daemon-reload
- 重启docker
systemctl restart docker
1 | docker start hello-world # 也可以是 hello-world 的 id |
安装 mysql
1 | docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql |
容器备份
1 | docker ps |
docker的debian中安装python和node
docker exec -it -u root coder_coder_1 sh
以root
角色进入docker
sudo apt-get -y update
更新apt-get
sudo apt-get install aptitude
安装aptitude
sudo aptitude -y install gcc make zlib1g-dev libffi-dev libssl-dev
安装依赖包apt-get install vim
如果没有vim
则需要安装apt-get install wget
如果没有wget
则需要安装wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
下载Python 3.6.9
tar -xzvf Python-3.6.9.tgz
解压压缩包cd Python-3.6.9/
进入文件夹./configure --prefix=/usr/local/python36
安装配置make && make install
安装配置sudo chmod 777 -R /usr/local/python36
赋予权限vim ~/.bashrc
打开环境变量export PATH=/usr/local/python36/bin:$PATH
最后一行加入source ~/.bashrc
使配置的环境变量生效sudo apt-get install nodejs
sudo apt-get install npm
安装 showdoc
- 原版官方镜像安装命令(国内用户配置阿里容器加速)
docker pull star7th/showdoc
- 新建存放
showdoc
数据的目录mkdir -p /showdoc_data/html
chmod -R 777 /showdoc_data
- 启动
showdoc
容器docker run -d --name showdoc --user=root --privileged=true -p 4999:80 -v /showdoc_data/html:/var/www/html/ star7th/showdoc
docker run -d --name showdoc --user=root --privileged=true -p 8003:80 -v \html:/var/www/html/ star7th/showdoc
docker run -d --name showdoc --user=root --privileged=true -p 4999:80 -v E:/learn/showdoc/html:/var/www/html/ star7th/showdoc
- 数据转移
docker exec showdoc
进入到容器docker exec showdoc cp -fr /showdoc/html /var/www/html
从容器拷贝数据
- 默认账号
showdoc
- 默认密码
123456
- 创建用户->登录->创建项目
小技巧
- 忘记密码?设置无密码访问docker?
vi config.xml
,改标签useSecurity
的值为false
,保存退出重启docker
- 如何创建一个在3306端口的容器名称为mysql的Mysql容器,创建后在后台持续运行?
docker run -itd --name mysql -p 3306:3306 -e=MYSQL_ROOT_PASSWORD=123456 mysql
1
2
3
4
5
6
7
8
9
10
11docker run 命令来创建
itd交互式终端后台运行
name指定容器名称
p指定映射端口
最后Mysql比较特殊,需要指定MYSQL_ROOT_PASSWORD变量 + mysql镜像名称
正确的命令是:docker run -itd --name mysql -p 3306:3306 -e=MYSQL_ROOT_PASSWORD=123456 mysql
`docker start mysql -p 3306:3306 -e=MYSQL_ROOT_PASSWORD=123456 mysql`与`docker start -p 3306:3306 -e=MYSQL_ROOT_PASSWORD=123456 mysql` start命令只能运行一个已经存在mysql容器,但是无法创建
`docker run -p 3306:3306 -e=MYSQL_ROOT_PASSWORD=123456 mysql`正常创建并运行,但是退出终端后,可能会被停止Mysql
# 推荐:
docker run --name mysql-name -d -p 3306:3306 mysql
然后使用docker start/stop/restart mysql-name命令进行管理
- Docker 容器暴露多个端口
1
2docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
sudo docker run -it -p 8801:8080 -p 50000:50000 -p 10051:10051 -v /home/jenkins/data:/var/jenkins_home cxvh/alijenkins:v1.0 - Jumpserver
sudo docker stop $(sudo docker ps -aq)
停掉Jumpserver
相关的所有容器
- 在用户权限下
docker
命令需要sudo
,否则报错Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.
- 可以把用户添加到用户组
sudo groupadd userdocker
添加userdocker
用户组sudo gpasswd -a $USER userdocker
将登陆用户加入到userdocker
用户组中 orsudo gpasswd -a yonghuming userdocker
newgrp docker
更新用户组并重启docker
常见报错
- 重启系统后运行 docker ps 报错?
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 解决方法:
systemctl daemon-reload
systemctl restart docker.service
- docker 拉取的 mysql 版本不支持?
1251 - client does not support authentication protocol requested by server consider upgrading
- 解决方法:1.指定版本 or 2.升级桌面工具
- docker pull mysql:5.7.25
- docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25
- 运行
gitlab
firewall-cmd --add-port=13800/tcp --permanent
放行端口firewall-cmd --reload
重新加载docker logs -f gitlab_test
持续打印日志,看下 gitlab 做了什么事情- 可以看到默认用户名是 root,第一次访问地址会让创建密码
docker rm gitlab_test
删除容器1
2
3
4
5
6
7
8
9sudo docker run --detach \
--hostname 39.100.247.246 \
--publish 443:443 --publish 13800:80 --publish 13822:22 \
--name gitlab_test \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ee:latest
- 服务正常运行,有 logs,但是无法访问,注意端口:
1
2
3
4win 查看端口:netstat -ano |findstr "10002"
linux 查看端口:netstat -anp |grep 80
# 端口如果正常,看下一些权限问题,如数据映射到本地没有执行权限,给文件夹个 777 权限 docker run --name jenkins_cxvh -itd -p 11005:8080 -p 50000:50000 jenkins/jenkins:lts
1
2
3
4
5
6
7# 端口被占用
bind for 0.0.0.0:50000 failded: port is already allocated
# 名称被占用
the container name "/jenkins_cxvh" is already in use by container "45646q45eq6q54weq6".you have to remove (or rename) that container to be....
# 解决名称占用
docker rm jenkins_cxvhdocker cp e1c25b752479:/tmp/data /tmp/mongo/data
1
2# 可能是要拷贝的文件不存在
Error: No such container:path: e1c25b752479:/tmp/data
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BARAN的小站🔥🔥🔥!